我正在寻找一种正确的方法来测量 openCV FPS。我找到了几种方法来做到这一点。但它们都不适合我。
我测试过的第一个使用time_t 开始和 time_t 结束。我认为一旦它返回一个转储的函数作为 fps x 时间图(我真的无法想象 fps 的图如何可能是一个转储的函数),我认为这是错误的。
这是该情节的图像。
我测试过的第二个用途t = (双)cvGetTickCount()测量 fps。一旦返回 120 fps 结果,这种方法就是错误的,但是,对于以 120 fps 捕获的 30 秒长度的视频,处理时间不应超过 1 分钟。所以这是衡量 FPS 的错误方法。
有人知道在 openCV 中测量 FPS 的另一种方法吗?
诗。我试图在视频的每一帧中找到圆圈。视频帧大小为 320x240 像素。
Update 2我正在尝试测量 FPS 的代码。
for(;;)
{
clock_t start=CLOCK();
Mat frame, finalFrame;
capture >> frame;
finalFrame = frame;
cvtColor(frame, frame, CV_BGR2GRAY);
GaussianBlur(frame, frame, Size(7,7), 1.5, 1.5);
threshold(frame, frame, 20, 255, CV_THRESH_BINARY);
dilate(frame, frame, Mat(), Point(-1, -1), 2, 1, 1);
erode(frame, frame, Mat(), Point(-1, -1), 2, 1, 1);
Canny(frame, frame, 20, 20*2, 3 );
vector<Vec3f> circles;
findContours(frame,_contours,_storage,CV_RETR_CCOMP,CV_CHAIN_APPROX_SIMPLE );
vector<vector<Point> > contours_poly( _contours.size() );
vector<Rect> boundRect( _contours.size() );
vector<Point2f>center( _contours.size() );
vector<float>radius( _contours.size() );
int temp = 0;
for( int i = 0; i < _contours.size(); i++ )
{
if( _contours[i].size() > 100 )
{
approxPolyDP( Mat(_contours[i]), contours_poly[i], 3, true );
boundRect[i] = boundingRect( Mat(_contours[i]) );
minEnclosingCircle( (Mat)_contours[i], center[i], radius[i] );
temp = i;
break;
}
}
double dur = CLOCK()-start;
printf("avg time per frame %f ms. fps %f. frameno = %d\n",avgdur(dur),avgfps(),frameno++ );
frameCounter++;
if(frameCounter == 3600)
break;
if(waitKey(1000/120) >= 0) break;
}
Update
Program execution using the Zaw Lin method!