17

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

4

3 回答 3

35

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

于 2012-05-06T23:43:06.053 回答
8

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

cap.get(cv2.CAP_PROP_POS_FRAMES)
于 2019-04-16T21:56:18.483 回答
4

在 OpenCV python 中这样做的方式是这样的:

import cv2
cam = cv2.VideoCapture(<filename>);
print cam.get(cv2.cv.CV_CAP_PROP_POS_FRAMES)
于 2014-07-07T21:35:32.593 回答