为什么我的视频的第一帧在结尾处被复制,并且在我使用OpenCV的帧提取过程结束时被复制?

njthzxwz  于 2023-03-03  发布在  其他
关注(0)|答案(1)|浏览(113)

我正在使用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()的设置?它显然似乎与视频结束后显示的第一帧有关。

aiqt4smr

aiqt4smr1#

正如所怀疑的,问题与视频文件本身的结束行为有关,通过更改视频文件的结束行为,cap.read()将在最后一帧正确返回False

相关问题