如何使用 OpenCV 检索视频的当前帧号? OpenCV 是否有任何内置函数来获取当前帧还是我必须手动执行?
您可以使用捕获对象的“get”方法,如下所示:
capture.get(CV_CAP_PROP_POS_FRAMES); // retrieves the current frame number
还有:
capture.get(CV_CAP_PROP_FRAME_COUNT); // returns the number of total frames
顺便说一句,这些方法返回一个双精度值。
您还可以使用 cvGetCaptureProperty 方法(如果您使用旧的 C 接口)。
cvGetCaptureProperty(CvCapture* capture,int property_id);
property_id 选项及其定义如下:
CV_CAP_PROP_POS_MSEC 0
CV_CAP_PROP_POS_FRAME 1
CV_CAP_PROP_POS_AVI_RATIO 2
CV_CAP_PROP_FRAME_WIDTH 3
CV_CAP_PROP_FRAME_HEIGHT 4
CV_CAP_PROP_FPS 5
CV_CAP_PROP_FOURCC 6
CV_CAP_PROP_FRAME_COUNT 7
(摘自《学习 OpenCV》一书)
在 openCV 3.4 版本中,正确的标志是:
cap.get(cv2.CAP_PROP_POS_FRAMES)
OpenCV python 中的做法是这样的:
import cv2
cam = cv2.VideoCapture(<filename>);
print cam.get(cv2.cv.CV_CAP_PROP_POS_FRAMES)
我想我迟到了,但我会添加一些答案。正如文档所说,我们可以将 cv2 图像的缓冲区大小调整为 1,并且在显示帧后,我们可以使用 cap.grab() 跳过缓冲区来抓取下一帧
import cv2
cap = cv2.VideoCapture(0)
if not cap.isOpened():
raise IOError("Cannot open webcam")
cap.set(cv2.CAP_PROP_BUFFERSIZE, 1)
while True:
ret, frame = cap.read()
cv2.imshow('frame', frame)
if cv2.waitKey(0) == ord('q'):
break
cap.grab()