如何使用OpenCV检索视频的当前帧编号?OpenCV是否有任何内置功能来获取当前帧,或者我必须手动操作?
fdx2calv1#
你可以像下面这样使用捕获对象的“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 0CV_CAP_PROP_POS_FRAME 1CV_CAP_PROP_POS_AVI_RATIO 2CV_CAP_PROP_FRAME_WIDTH 3CV_CAP_PROP_FRAME_HEIGHT 4CV_CAP_PROP_FPS 5CV_CAP_PROP_FOURCC 6CV_CAP_PROP_FRAME_A17
(from学习OpenCV书籍)
trnvg8h32#
在openCV 3.4版本中,正确的标志是:
cap.get(cv2.CAP_PROP_POS_FRAMES)
vptzau2j3#
在OpenCV python中的方法是这样的:
import cv2 cam = cv2.VideoCapture(<filename>); print cam.get(cv2.cv.CV_CAP_PROP_POS_FRAMES)
plicqrtu4#
我想我迟到了,但我会添加一些答案。正如文档所说,我们可以将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()
4条答案
按热度按时间fdx2calv1#
你可以像下面这样使用捕获对象的“get”方法:
以及:
顺便说一句,这些方法返回一个双精度值。
你也可以使用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_A17
(from学习OpenCV书籍)
trnvg8h32#
在openCV 3.4版本中,正确的标志是:
vptzau2j3#
在OpenCV python中的方法是这样的:
plicqrtu4#
我想我迟到了,但我会添加一些答案。正如文档所说,我们可以将cv2图像的缓冲区大小调整为1,在显示帧后,我们可以使用cap.grab()跳过缓冲区抓取到下一帧。