使用OpenCV延迟捕获相机框架



我正在编写一个程序以使用OpenCV 2.49捕获相机帧。

我的问题是摄像头捕获高达500 fps。但是,在第五帧捕获框架下降到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. 使用时钟的期间属性而不是1000000。
  3. 我认为您要" == 27"而不是" = 27"

最新更新