我使用以下代码从视频文件中提取特定帧。在这个例子中,我只是得到了中间帧:
import cv2
video_path = '/tmp/wonderwall.mp4'
vidcap = cv2.VideoCapture(video_path)
middle_frame = int(vidcap.get(cv2.CAP_PROP_FRAME_COUNT) / 2)
success, image = vidcap.read()
count = 0
success = True
while success:
success, image = vidcap.read()
if count == middle_frame:
temp_file = tempfile.NamedTemporaryFile(suffix='.jpg', delete=False)
cv2.imwrite(temp_file.name, image)
count += 1
但是,使用这种方法,在一个非常大的文件中捕获中间帧可能需要一段时间。
显然,在较旧的cv
模块中,可以这样做:
import cv
img = cv.QueryFrame(capture)
是否有类似的方法cv2
来抓取视频文件中的特定帧,而不必遍历所有帧?