在OpenCV中检索当前帧编号

yx2lnoni  于 2023-10-24  发布在  其他
关注(0)|答案(4)|浏览(190)

如何使用OpenCV检索视频的当前帧编号?OpenCV是否有任何内置功能来获取当前帧,或者我必须手动操作?

fdx2calv

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 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

  • POS_MSEC是视频文件中的当前位置,以毫秒为单位。
  • POS_FRAME是当前帧在视频中的位置(如视频的第55帧)。
  • POS_AVI_RATIO是当前位置,表示为0到1之间的数字(当您想要定位跟踪条以允许人们在视频中导航时,这实际上非常有用)。
  • FRAME_WIDTH和FRAME_HEIGHT是要读取(或在相机当前设置下捕获)的视频的各个帧的尺寸。
  • FPS是特定于视频文件的,表示视频捕获的每秒帧数。如果您想播放视频并以正确的速度播放,您需要知道这一点。
  • FOURCC是用于当前阅读的视频的压缩编解码器的四字符代码。
  • FRAME_DATA应该是视频中的总帧数,但这个数字并不完全可靠。

(from学习OpenCV书籍)

trnvg8h3

trnvg8h32#

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

cap.get(cv2.CAP_PROP_POS_FRAMES)
vptzau2j

vptzau2j3#

在OpenCV python中的方法是这样的:

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

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()

相关问题