【发布时间】:2020-04-27 18:10:08
【问题描述】:
我创建了一个程序来将视频提取到帧中。我需要建议在没有更多帧显示后停止 cv2.imshow()。
视频帧数 = 88
fps = 10.0
持续时间= int(8)
def reading_video():
read_input = cv2.VideoCapture(r"D:\data\input.mp4")
frame_rate = int(read_input.get(cv2.CAP_PROP_FRAME_COUNT)) # 88
print("total number of frames is ", frame_rate)
fps = read_input.get(cv2.CAP_PROP_FPS) #10.0
duration = int((frame_rate/fps) %60)# 8
print(duration) # 8.0
initial_frame = 0
while read_input.isOpened():
ret, frame = read_input.read()
if ret == True:
cv2.imshow('video_frame', frame)
write_path = r"D:\data\frame_output"
write_name = 'frame0' + str(initial_frame) + '.jpg'
cv2.imwrite(os.path.join(write_path, write_name), frame)
initial_frame += 1
if cv2.waitKey(0) & 0xFF == ord('c'):
break
else:
break
instance_variable = reading_video()
instance_variable.release()
cv2.destroyAllWindows()
如果 waitkey(int(duration)) 则播放,并且在无帧后我确实收到 cv2 断言错误。
如果 waitkey(0) 那么我得到 AttributeError: 'NoneType' object has no attribute 'release'
【问题讨论】:
-
你为什么在
instance_variable上使用release()?reading_video()不使用return所以它返回None所以你有instance_variable = None和后来的None.release()