Начать чтение видео с определенного кадра

Я получил 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()
Другие вопросы по тегам