开发者

How to get web camera fps rate in OpenCV?

So I need to get web camera fps rate in OpenCV. Which function can do 开发者_JAVA技巧such thing for?


int cvGetCaptureProperty( CvCapture* capture, int property_id);

with property_id = CV_CAP_PROP_FPS


It seems that for live webcam capture, you can set an arbitrary fps and read back that same fps, which has nothing to do with the real fps from webcam. Is it a bug?

For example:

cvSetCaptureProperty(capture,CV_CAP_PROP_FPS,500);

and later

double rates = cvGetCaptureProperty(capture,CV_CAP_PROP_FPS);
printf("%f\n",rates);

will give you 500.

But if I timed it using web cam fps link, it's around the normal 30fps.


In my case, fps = video.get(cv2.CAP_PROP_FPS) did not work.

So, I found this code in this link:

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


*OpenCV 2 solution:

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

E.g.

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜