我正在尝试计算程序从图像中检测关键点所需的时间。 如果在我的c ++程序中我做了两次(使用相同的图像),两者之间存在巨大差异。它第一次使用大约600-800毫秒,第二次只使用100-200毫秒。
有谁知道发生了什么?
这是我得到时间的代码:
struct timeval t1, t2;
Ptr<SURF> detector = SURF::create(400);
gettimeofday(&t1, 0x0);
detector->detect( imagen1, keypoints_1 );
gettimeofday(&t2, 0x0);
int milliSeconds = Utils::calculateDiff(t1, t2);
这是我计算差异的代码:
static int calculateDiff(timeval t1, timeval t2)
{
return (t2.tv_sec - t1.tv_sec) * 1000 + (t2.tv_usec - t1.tv_usec)/1000;
}
以下是一个示例:
答案 0 :(得分:2)
请注意,gettimeofday正在使用wall-time,而像这样的问题通常需要cpu / clock-time。
用于分析,尝试一些东西(甚至更便携),如下所示:
int64 t0 = cv::getTickCount();
//
// some lengthy op.
//
int64 t1 = cv::getTickCount();
double secs = (t1-t0)/cv::getTickFrequency();
答案 1 :(得分:1)
你可以使用getTickCount()和getTickFrequency()来计算时间。但是使用这些功能时会出现截断问题。经过一番尝试,这段代码对我有用:
long double execTime, prevCount, time;
execTime = prevCount = time = 0;
for (;;)
{
prevCount = getTickCount() * 1.0000;
/*do image processing*/
time += execTime;
cout << "execTime = " << execTime << "; time = " << time << endl;
execTime = (getTickCount()*1.0000 - prevCount) / (getTickFrequency() * 1.0000);
}