我正在编写一个程序以使用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;
...
}
另一个改进将是:
- 每秒打印fps而不是每次拍照时。
- 使用时钟的期间属性而不是1000000。
- 我认为您要" == 27"而不是" = 27"