Начать чтение видео с определенного кадра
Я получил frame_count сохраненного видео.
self.frame_count = self.capture.get(cv.CV_CAP_PROP_FRAME_COUNT) - 1
Теперь я хочу начать чтение кадра с определенного frame_count. Как мне это сделать?
Причина: мне нужно отслеживать объект, и я нашел местоположение объекта, который я хочу отслеживать, используя сегментацию изображения HSV. Теперь, чтобы отследить его, я собираюсь запустить видео с этого конкретного кадра и установить в окне трека координаты объектов.
Хотите: он не должен быть избыточным и требовать больших вычислительных ресурсов.
2 ответа
Попробуйте следующее:
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
Используйте приведенный ниже код для выполнения вашей задачи.
Версия 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"
Я надеюсь, что это код, который вы хотите.
Для любой версии 3 и 4 OpenCV Python выполните следующие действия:
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()