在 OpenCV 中检索当前帧号

Posted

技术标签:

【中文标题】在 OpenCV 中检索当前帧号【英文标题】:Retrieving the current frame number in OpenCV 【发布时间】:2012-05-15 13:18:38 【问题描述】:

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

【问题讨论】:

【参考方案1】:

您可以使用捕获对象的“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

POS_MSEC 是视频文件中的当前位置,以 毫秒。 POS_FRAME 是当前帧在视频中的位置(如视频的第 55 帧)。 POS_AVI_RATIO 是当前位置,以 0 到 1 之间的数字形式给出 (当您想要定位轨迹栏时,这实际上非常有用 以便人们浏览您的视频)。 FRAME_WIDTH 和 FRAME_HEIGHT 是个体的尺寸 要读取的视频帧(或要在相机的 当前设置)。 FPS 特定于视频文件,表示帧数 每秒捕获视频的速度。你需要知道 如果您想播放视频并在 正确的速度。 FOURCC 是压缩编解码器的四字符代码 用于您当前正在阅读的视频。 FRAME_COUNT 应该是视频中的总帧数,但是 这个数字并不完全可靠。

(来自学习 OpenCV 书)

【讨论】:

【参考方案2】:

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

cap.get(cv2.CAP_PROP_POS_FRAMES)

【讨论】:

实际适用于opencv-contrib-python 版本 4.5.2.54【参考方案3】:

OpenCV python中的做法是这样的:

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

【讨论】:

以上是关于在 OpenCV 中检索当前帧号的主要内容,如果未能解决你的问题,请参考以下文章

从opencv c ++中的视频文件中检索每第三帧

如何以优雅的方式使用 OpenCV、c++ 检索偶数/奇数索引中的值?

如何检索轮廓点 - 使用 opencv 转换为矢量?

图像检索:基于OpenCV实现小型的图像数据库检索

OpenCV-Python实战(番外篇)——OpenCV中绘制模拟时钟显示当前时间

opencv---(腐蚀膨胀边缘检测轮廓检索凸包多边形拟合)