我正在寻找一种正确的测量openCV FPS的方法。我已经尝试了几种方法,但是没有一种对我来说看起来是正确的。
第一个我测试的方法使用time_t start和time_t end。我认为这种方法是错误的,因为它返回给我一个作为fps x时间图的转储函数(我真的无法想象fps图如何成为一个转储函数)。
以下是该图像的图片。
第二个我测试的方法使用t = (double)cvGetTickCount()来测量fps。这种方法是错误的,因为它返回120 fps作为结果,但是对于使用120 fps拍摄的30秒长视频,处理时间不应超过1分钟。所以这是一种错误的测量FPS的方法。
有人知道在openCV中测量FPS的另一种方法吗?
附注:我正在尝试在视频的每个帧中查找圆。视频帧大小为320x240像素。
更新2:我尝试测量FPS的代码。
第一个我测试的方法使用time_t start和time_t end。我认为这种方法是错误的,因为它返回给我一个作为fps x时间图的转储函数(我真的无法想象fps图如何成为一个转储函数)。
以下是该图像的图片。
第二个我测试的方法使用t = (double)cvGetTickCount()来测量fps。这种方法是错误的,因为它返回120 fps作为结果,但是对于使用120 fps拍摄的30秒长视频,处理时间不应超过1分钟。所以这是一种错误的测量FPS的方法。
有人知道在openCV中测量FPS的另一种方法吗?
附注:我正在尝试在视频的每个帧中查找圆。视频帧大小为320x240像素。
更新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;
}
更新
采用Zaw Lin方法执行程序!
getTickCount()
返回的是一个时钟周期数,而不是秒数。你需要使用getTickFrequency()
将时钟周期数转换为秒数。请参考 http://docs.opencv.org/modules/core/doc/utility_and_system_functions_and_macros.html?highlight=gettickcount#gettickfrequency。 - BConic