从特定帧开始视频读取

时间:2014-01-31 08:39:10

标签: python opencv image-processing hsv

我已获取已保存视频的frame_count。

self.frame_count = self.capture.get(cv.CV_CAP_PROP_FRAME_COUNT) - 1

现在,我想从特定的frame_count开始读取帧。我该怎么做呢?

原因:我需要跟踪一个对象,并且我已经使用HSV图像分割找到了我想要跟踪的对象的位置。现在要跟踪它,我打算从该特定帧开始视频并将轨道窗口设置为对象的坐标。

想要:它不应该是冗余和计算密集型的。

3 个答案:

答案 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()