我正在使用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秒。 提前谢谢。
答案 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;