繁体   English   中英

我可以使用C ++和Opencv以20 fps捕获吗?

[英]Can i capture at 20 fps with C++ and Opencv?

我有一个Raspberry Pi,并在其上安装了OpenCV和Guvcview。 当我打开Guvcview时,我的速度约为17-21 fps,但是当我使用Opencv在C ++中运行一个简单的程序(仅从网络摄像头和显示帧捕获)时,我的速度仅为6 fps。

怎么了? 我需要配置Opencv以使用Guvcview的配置吗? guvcview为什么会获得20 fps? 我能做什么?

谢谢。

PD我在计算机上也做过同样的事情,在两种情况下都可以达到29 fps。

// * ** * ** * ** * ** * ** * ** * ** * ** * ** * **** *这是代码C ++:

 #include <iostream>
    #include "opencv2/opencv.hpp"
    using namespace std;
    using namespace cv;

    time_t start, end; //variabile di tipo time_t , contiene tempo in sec. 
    // inizializzo contatore nella dichiarazione 
    int counter=0;

    int main()
    { time(&start);
    VideoCapture cap(1);
    cap.set(CV_CAP_PROP_FRAME_WIDTH, 640);
    cap.set(CV_CAP_PROP_FRAME_HEIGHT, 480); 

    if (!cap.isOpened())
    { cout << "could not capture";
    return 0; }

    Mat frame;
    namedWindow("camera", 1);
    char key = 'a';

    while(key != 27)
    {   cap.read( frame);
    imshow("camera", frame);

    //##################
    //time at the end of 1 show, Stop the clock and show FPS
    time(&end);
    ++counter;
    cout <<"fps: "<< counter/ difftime(end,start) <<endl <<endl;
    //##################

    key = waitKey(3); }

    destroyAllWindows();
    return 0;
    }

OpenCV是一个重量级的API,以下提示可能会带来一些小的改进:

您可以禁用RGB转换:

 cap.set(CV_CAP_PROP_CONVERT_RGB , false);

如果其默认帧速率较低,则可以提高帧速率:

cap.set(CV_CAP_PROP_FPS , 60);

我建议通过V4L进行直接视频捕获,因为OpenCV可能会进行YUYV到RGB转换以及涉及浮点计算的其他工作,而在此类硬件上这很昂贵。 我们已经在嵌入式系统上完成了许多机器人项目,并且凭经验得出的结论是,直接使用V4L或小型第三方库(例如CMVision)始终会更好( http://www.cs.cmu.edu/~jbruce/ cmvision / )在嵌入式系统上进行图像处理。

暂无
暂无

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

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