在OpenCV中检索当前帧编号

时间:2012-05-06 23:35:08

标签: c++ opencv frame vision

如何使用OpenCV检索视频的当前帧编号? OpenCV是否有任何内置函数来获取当前帧,或者我必须手动完成它?

3 个答案:

答案 0 :(得分:19)

您可以使用捕获对象的“get”方法,如下所示:

capture.get(CV_CAP_PROP_POS_FRAMES); // retrieves the current frame number

还有:

capture.get(CV_CAP_PROP_FRAME_COUNT); // retuns the number of total frames 

顺便说一句,这些方法返回一个double值。

您也可以使用cvGetCaptureProperty方法。

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

POS_MSEC是视频文件中的当前位置,以毫秒为单位。 POS_FRAME是帧编号中的当前位置。 POS_AVI_RATIO是以0到1之间的数字给出的位置(当您想要定位轨迹栏以允许人们浏览您的视频时,这实际上非常有用)。 FRAME_WIDTH和FRAME_HEIGHT是视频各个帧的尺寸 要读取(或在相机的当前设置下捕获)。 FPS特定于视频文件,并指示捕获视频的每秒帧数;您 如果你想播放你的视频并让它出来,你将需要知道这一点 正确的速度。 FOURCC是用于您当前正在阅读的视频的压缩编解码器的四字符代码。 FRAME_COUNT应该是视频中的总帧数,但这个图片并不完全可靠。 (来自Learning OpenCV学习书)

答案 1 :(得分:3)

在OpenCV python中执行此操作的方式如下:

import cv2
cam = cv2.VideoCapture(<filename>);
print cam.get(cv2.cv.CV_CAP_PROP_POS_FRAMES)

答案 2 :(得分:0)

在openCV 3.4版中,正确的标志是:

cap.get(cv2.CAP_PROP_POS_FRAMES)