я использую 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 секунд.
Заранее спасибо.
Если доступно (C ++ 11), вы можете использовать хронограф.
#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";
Вопрос старый, но опубликованный ответ, на мой взгляд, не тот, который следует использовать при работе с OpenCV.
Чтобы измерить время операции, OpenCV предоставляет функции для этого. Вы можете проконсультироваться официальная документация для этого.
Вот код для записи:
double t = (double)getTickCount();
// do something ...
t = ((double)getTickCount() - t)/getTickFrequency();
Другим способом является использование TickMeter
объект в OpenCV.
Вот описание 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;