簡體   English   中英

使用openCV延遲捕獲相機幀

[英]Delay in capturing camera frames using openCV

我正在編寫一個使用opencv 2.49捕獲相機幀的程序。

我的問題是攝像頭蓋最多可以捕獲500 FPS。 但是在第5幀之后,捕獲幀下降到40 FPS,有時下降到500 FPS。

誰能想到為什么會這樣? 我如何解決捕獲幀數為500 FPS的問題。

我已經附上了輸出FPS

while(true)
{
    cout << "\nStart while loop:" << endl;
    auto t1 = chrono::high_resolution_clock::now(); 


    Mat curFrame;
    cap >> curFrame;
    if( curFrame.empty() ) break; // end of video stream

    auto t2 = chrono::high_resolution_clock::now();     

    auto cap_time = chrono::duration_cast<chrono::microseconds>( t2 - t1 ).count();
    cout << "cap_time :" << cap_time << " microseconds, " << 1000000/(float)cap_time << " FPS" << endl;

    imshow("Original", curFrame);

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

您必須測量與拍攝最后一張圖像的時間之間的差異,而不是將圖像保存到變量中所花費的時間。

偽代碼:

time = -1;
while (true)
{
    new_time = now();
    if (time != -1)
    {
        time_diff = new_time - time;
        if (time_diff == 0) // avoid null pointer exception
            cout << "infinite FPS";
        else
            cout << 1000000.d / double(time_diff) << "FPS";
    }
    time = new_time;
    ...
}

另一個改進將是:

  1. 每秒打印FPS,而不是每次拍照。
  2. 使用時鍾的period屬性而不是1000000。
  3. 我認為您要“ == 27”而不是“> = 27”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM