如何在OpenCV中获取网络摄像头的帧率?

3
所以我需要在OpenCV中获取网络摄像头的帧速率。哪个函数可以做到这一点?
4个回答

6
int cvGetCaptureProperty( CvCapture* capture, int property_id);

使用 property_id = CV_CAP_PROP_FPS 属性


1
在OpenCV/Python中,给定cap = cv2.VideoCapture(0),打印“帧率=”,cap.get(5)会返回0的fps,这对我来说不起作用。请注意,fps对于cv_cap_prop是恒定的5。 - user391339

2
似乎对于实时网络摄像头捕捉,您可以设置任意fps并读取相同的fps,这与网络摄像头的实际fps无关。这是一个bug吗?
例如:
cvSetCaptureProperty(capture,CV_CAP_PROP_FPS,500);

并且在之后。
double rates = cvGetCaptureProperty(capture,CV_CAP_PROP_FPS);
printf("%f\n",rates);

如果我使用网络摄像头FPS链接计时,它大约是正常的30fps。

将给你500。


1
在我的情况下,fps = video.get(cv2.CAP_PROP_FPS) 没有起作用。 所以,我在这个链接中找到了这段代码:

https://www.learnopencv.com/how-to-find-frame-rate-or-frames-per-second-fps-in-opencv-python-cpp/

import cv2
import time

if __name__ == '__main__':

    video = cv2.VideoCapture(1)

    # Find OpenCV version
    (major_ver, _, _) = (cv2.__version__).split('.')

    # With webcam get(CV_CAP_PROP_FPS) does not work.
    # Let's see for ourselves.

    if int(major_ver) < 3:
        fps = video.get(cv2.cv.CV_CAP_PROP_FPS)
        print "Frames per second using video.get(cv2.cv.CV_CAP_PROP_FPS): {0}".format(fps)
    else:
        fps = video.get(cv2.CAP_PROP_FPS)
        print "Frames per second using video.get(cv2.CAP_PROP_FPS) : {0}".format(fps)

    # Number of frames to capture
    num_frames = 120

    print "Capturing {0} frames".format(num_frames)

    # Start time
    start = time.time()

    # Grab a few frames
    for i in xrange(0, num_frames):
        ret, frame = video.read()

    # End time
    end = time.time()

    # Time elapsed
    seconds = end - start
    print "Time taken : {0} seconds".format(seconds)

    # Calculate frames per second
    fps = num_frames / seconds
    print "Estimated frames per second : {0}".format(fps);

    # Release video
    video.release()

0

*OpenCV 2 解决方案:

C++: double VideoCapture::get(int propId)

例如

VideoCapture myvid("video.mpg");
int fps=myvid.get(CV_CAP_PROP_FPS);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接