在 OpenCV 中检索当前帧编号

问题描述 投票:0回答:4

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

c++ opencv frame vision
4个回答
39
投票

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


11
投票

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

cap.get(cv2.CAP_PROP_POS_FRAMES)

5
投票

OpenCV python 中的做法是这样的:

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

0
投票

我想我迟到了,但我会添加一些答案。正如文档所说,我们可以将 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()
© www.soinside.com 2019 - 2024. All rights reserved.