如何衡量在C ++和OpenCV中KNN分类器训练的训练时间?

时间:2015-04-11 09:19:15

标签: c++ opencv classification knn

我正在使用CvKNearest进行KNN分类。我想衡量培训所需的时间。这是代码:

#include <time.h>
clock_t start, end;
double time;
start = clock();
KnnClassifier.train( trainData, classes, Mat(), false, 1 );
end = clock();
time = ((float) (end - start)) / CLOCKS_PER_SEC;
cout<<" Training time (s) =   "<<time << "\n";  

问题是结果是培训需要0秒。 提前谢谢。

2 个答案:

答案 0 :(得分:1)

如果可用(C ++ 11),你可以使用chrono。

#include <chrono>

auto start = std::chrono::system_clock::now();
KnnClassifier.train( trainData, classes, Mat(), false, 1 );
auto end = std::chrono::system_clock::now();
auto time = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
cout << " Training time (s) = " << time.count() << "\n";  

答案 1 :(得分:0)

问题已经过时了,但我认为发布的答案不是使用OpenCV时应该使用的答案。

为了测量操作的时间,OpenCV提供了执行此操作的功能。您可以咨询official documentation for that。 这是要编写的代码:

double t = (double)getTickCount();
// do something ...
t = ((double)getTickCount() - t)/getTickFrequency();

另一种方法是在OpenCV中使用TickMeter对象。 以下是官方文档中对TickMeter类的描述:

  

测量通过时间的类。

     

该类通过计算每个滴答数来计算传递时间   第二。也就是说,以下代码计算执行时间   秒:

TickMeter tm;
tm.start();
// do something ...
tm.stop();
std::cout << tm.getTimeSec();
     

也可以计算多次运行的平均时间:

TickMeter tm;
for (int i = 0; i < 100; i++)
{
    tm.start();
 // do something ...
    tm.stop();
}
double average_time = tm.getTimeSec() / tm.getCounter();
std::cout << "Average time in second per iteration is: " << average_time << std::endl;