OpenCV计算时间检测功能

时间:2014-11-20 10:10:09

标签: c++ opencv feature-detection surf

我正在尝试计算程序从图像中检测关键点所需的时间。 如果在我的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;
}

以下是一个示例:

Sample

2 个答案:

答案 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);
    }