2013-06-26 41 views
2

我有一個樹莓派並在其上安裝了OpenCV和Guvcview。當我打開Guvcview時,我得到了〜17-21 fps,但是當我用Opencv在C++中運行一個簡單的程序(只捕捉攝像頭和顯示幀)時,我只能獲得6 fps。我可以用C++和Opencv以20 fps捕獲嗎?

出了什麼問題?我需要配置Opencv來使用Guvcview的配置?爲什麼guvcview獲得20 fps?我能做什麼?

謝謝。

P.D.我在我的電腦上做了同樣的事情,在這兩種情況下我都能獲得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; 
    } 
+0

你可以嘗試使用默認分辨率嗎? –

+0

你的意思是刪除:cap.set(CV_CAP_PROP_FRAME_WIDTH,640); cap.set(CV_CAP_PROP_FRAME_HEIGHT,480); ? ...但我需要這個決議...我能以另一種方式設置嗎? – user2501133

+0

是的,你可以註釋掉這些行嗎? –

回答

1

我建議通過V4L進行直接視頻捕獲,因爲OpenCV可能會對YUYV進行RGB轉換以及涉及浮點計算的其他內容,而這些在這類硬件上都很昂貴。我們已經在嵌入式系統上完成了許多機器人項目,並且拇指的規則是,您將始終更好地直接使用V4L或像CMVision(http://www.cs.cmu.edu/~jbruce/cmvision/)這樣的小型第三方庫在嵌入式系統上執行圖像處理。

+0

喜, 因爲我看了你的答案,我已經研究過使用的可能性v4l API和CMVision庫。 我只需要將這些幀發送到pc進行處理;你認爲發送YUV灰度格式可能會提高速度嗎? – user2501133

+0

對不起,但我如何使用/安裝Cmvision?我從終端鍵入「make」,但我得到錯誤。感謝 – user2501133

+0

那麼,在我們的項目中,我們只包含我們需要的Cmvision源文件(因爲我們還使用了分部 - 只捕獲和區域搜索),我想你也應該找到你所需要的代碼,只是包括那些.C/.h文件在你的項目中。那麼,如果你需要給他們,那麼也許使用一種有損壓縮的格式,與YUV 4:2:0或者圖片AR附近的FullHD MJPEG/H.264。 –

4

的OpenCV是一個重量級的API和下面的提示可能引入小的改進:

您可以禁用RGB轉換:

cap.set(CV_CAP_PROP_CONVERT_RGB , false); 

可以提高幀頻如果默認幀率低:

cap.set(CV_CAP_PROP_FPS , 60); 
+0

它幫助我將FPS提高到至少65! –

相關問題