繁体   English   中英

如何使用所需的fps在c ++中使用OpenCV捕获视频

[英]How to capture video with OpenCV in c++ with a desired fps

我需要在OpenCV中使用一帧作为第二帧。 问题是VideoCapture :: get(CV_CAP_PROP_FPS); 总是返回0.如果我尝试用VideoCapture设置所需的fps ::设置没有任何改变。

这是我的代码:

VideoCapture cap(0); 

if (!cap.isOpened()) {
    cout << "Cannot open the video cam" << endl;
    return -1;
}

double dWidth = cap.get(CV_CAP_PROP_FRAME_WIDTH);
double dHeight = cap.get(CV_CAP_PROP_FRAME_HEIGHT);
double fps = 1;
cap.set(CV_CAP_PROP_FPS, fps);
cout << "FPS : " << fps << endl;

cout << "Frame size : " << dWidth << " x " << dHeight << endl;


namedWindow("CAPTURE EXPRESSION",CV_WINDOW_AUTOSIZE);     
while (1) {
    Mat frame;

    bool bSuccess = cap.read(frame);

    if (!bSuccess) {
        cout << "Cannot read a frame from video stream" << endl;
        break;
    }
    fps = cap.get(CV_CAP_PROP_FPS);
    imshow("MyVideo", frame); 
    cout << "FPS : " << fps << endl;

    if (waitKey(30) == 27) {
        cout << "esc key is pressed by user" << endl;
        break; 
    }
}

PS我正在使用OpenCV 2.4.9和Mac OS,以及MacBook的集成摄像头

您无法为相机Feed设置帧速率,因为它们只是在您的代码请求时通过管道输入。 你可以在你的代码中加一个延迟,每隔1秒就要求它们一次,我觉得这对你的用例很有帮助。

见下面的代码。

VideoCapture上限(0);

而(1){

 Mat frame; bool bSuccess = cap.read(frame); imshow("MyVideo", frame); //This Sets the Frame Rate to 1000ms (1s) cv::waitKey(1000); 

}

这个fps的设置和获取总是搞得一团糟,即使我以前也是如此,它们是随机的,一个人的正确解释将是一个有趣的事情。 它可能对视频容器有一些依赖性。

但是,我不认为fps的设置参数适用于实时摄像头,它就像要求网络摄像头前的世界运行缓慢,这不会发生。 另一种方法是将实时帧存储在缓冲区中并按照您所需的速度显示。 我不认为opencv会这样做。 因此,如果您想要较慢的速率,请录制视频,然后设置fps并检查录制的视频。

而waitKey,数字更高,在实时流的情况下,跳过中间间隔的帧,所以只使用它,如果你认为,它会帮助你。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM