Se si desidera un fotogramma esatto, si può solo impostare la sessione VideoCapture a quel fotogramma. È molto più intuitivo chiamare automaticamente quel frame. La soluzione "corretta" richiede l'inserimento di dati noti: come fps, lunghezza e quant'altro. Tutto quello che devi sapere con il codice qui sotto è il frame che vuoi chiamare.
import numpy as np
import cv2
cap = cv2.VideoCapture(video_name) #video_name is the video being called
cap.set(1,frame_no); # Where frame_no is the frame you want
ret, frame = cap.read() # Read the frame
cv2.imshow('window_name', frame) # show frame on window
Se si vuole tenere la finestra, fino a quando si preme l'uscita:
while True:
ch = 0xFF & cv2.waitKey(1) # Wait for a second
if ch == 27:
break
In 'pitone 3.5' usando' cap.set() ', il primo argomento definisce il numero di frame nell'intervallo 0,0-1,0. Quindi è 'cap.set (1, frame_no)'. – zinon
In cap.set() il primo argomento dovrebbe essere 'cv2.cv.CV_CAP_PROP_POS_FRAMES' senza alcuna magia '1' o '2'. Il secondo è il numero di fotogramma nel range 0 - cv2.cv.CV_CAP_PROP_FRAME_COUNT - è un numero intero, non float 0.0 - 1.0! –