我正在使用OpenCV从视频中提取帧。一旦过程完成,所有帧都被提取出来,代码就会继续提取视频的第一帧,看起来似乎是无限的。
到目前为止,OpenCV代码对我所有的视频都有效,除了这一个,它是用另一种相机拍摄的,所以我怀疑视频文件有什么不同。值得注意的是,当我在快速时间播放视频时,视频的第一帧显示在最后。
cap = cv2.VideoCapture('Our_Video.mp4')
i = 0
while(cap.isOpened()):
cap.set(cv2.CAP_PROP_POS_FRAMES, i)
IsNotEnd, frame = cap.read()
if IsNotEnd == False:
break
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
cv2.imwrite(os.path.join('increment_'+str(i)+'.png'),gray)
i+=1
cap.release()
cv2.destroyAllWindows()
显然,变量IsNotEnd
从未被设置为False -如何更改cap.read()
的设置?它显然似乎与视频结束后显示的第一帧有关。
1条答案
按热度按时间aiqt4smr1#
正如所怀疑的,问题与视频文件本身的结束行为有关,通过更改视频文件的结束行为,
cap.read()
将在最后一帧正确返回False
。