我已获取已保存视频的frame_count。
self.frame_count = self.capture.get(cv.CV_CAP_PROP_FRAME_COUNT) - 1
现在,我想从特定的frame_count开始读取帧。我该怎么做呢?
原因:我需要跟踪一个对象,并且我已经使用HSV图像分割找到了我想要跟踪的对象的位置。现在要跟踪它,我打算从该特定帧开始视频并将轨道窗口设置为对象的坐标。
想要:它不应该是冗余和计算密集型的。
答案 0 :(得分:2)
使用以下代码完成您的任务。
您使用的Opencv版本已经过时了。使用Opencv2。
链接:
http://docs.opencv.org/trunk/doc/py_tutorials/py_tutorials.html
import numpy as np
import cv2
import os
cam = cv2.VideoCapture('full_path/bird.avi')
i = 1
initialize_first_frame = cam.read()[1]
start_from_frame = 5
dir = './testImages/'
os.makedirs(dir)
while True:
if(i>=start_from_frame):
cv2.imshow('Frame Conversion',cam.read()[1])
cv2.imwrite(dir + "/image-"+str(i).zfill(5)+".png",cam.read()[1])
i = i + 1
key = cv2.waitKey(10)
if key == 27:
cv2.destroyWindow('Frame Conversion')
break
print "End"
我希望这是你想要的代码。
答案 1 :(得分:1)
尝试以下方法:
f = # put here the frame from which you want to start
self.capture.set(CV_CAP_PROP_POS_FRAMES, f)
while f < self.frame_count:
retval, image = self.capture.read()
f += 1
答案 2 :(得分:0)
对于OpenCV Python的第3版和第4版,请遵循此-
import cv2
# suppose you want to start reading from frame no 500
frame_set_no = 500
cap = cv2.VideoCapture("full_path/cow.mp4")
# capture is set to the desired frame
cap.set(cv2.CAP_PROP_POS_FRAMES, frame_set_no)
while True:
ret, frame = cap.read()
cv2.imshow("Video", frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cv2.destroyAllWindows()