寻找视频的开头以提取帧 - opencv

问题描述

我刚刚遇到了这个问题。

假设我有两张图片

import cv2
video = cv2.VideoCapture('video1.avi')

我想提取视频的帧,所以我这样做:

video.set(cv2.CAP_PROP_POS_FRAMES,0)
error1,frame1 = video.read()
error2,frame2 = video.read()
error3,frame3 = video.read()
...

我的问题是我不知道如何回到开始以再次获取帧。我希望可能有一个类似于 video.seek(0) 之类的函数......

video.read() 将始终获得下一帧。所以我先读了第 1 帧,然后是第 2 帧,但我想回到开头,这样当我执行 video.read() 时,它会再次提取第一帧。那我该怎么做呢?

像普通文件一样,你可以像这样读取文件

with open('my_file.txt','r') as f:
    line1 = f.readline()
    line2 = f.readline()

然后在获得一些行后,您可以使用以下命令重置回开头:

...
    ...
    f.seek(0)

然后你可以重新开始阅读这些行。

解决方法

哦,我刚刚发现了一个方法!

所以在得到一些帧之后:

video.set(cv2.CAP_PROP_POS_FRAMES,0)
error1,frame1 = video.read()
error2,frame2 = video.read()
error3,frame3 = video.read()
...

我可以再添加一个:

video.set(cv2.CAP_PROP_POS_FRAMES,0)

在它之后寻找回到起点!