由于自己写的代码速度运行过慢,对各个模块进行了测试,之前没有注意,现在发现在进行运算时间计算时也有坑
常用的方式有: 1. <windows.h> GetTickCount
2.<ctime> clock()
3.qt中<Qtime> XXX.start XXXX.elapsed
4. opencv getTickCount
发现如下问题: GetTickCount 有充值为零的风险,而且精度很低,偏差很大
opencv 能够精确到 us ,没有进一步验证
平常用 clock 即可保证ms级的精度
验证:
time_t start, end, time;
DWORD t_start, t_end, t_duration;
double t = (double)cv::getTickCount();
QTime QT_time;
QT_time.start();
start = clock();
t_start = GetTickCount();
cv::Mat a = cv::imread("2.bmp", cv::IMREAD_GRAYSCALE);
int QT_t=QT_time.elapsed() ;
end = clock();
t_end = GetTickCount();
t = ((double)cv::getTickCount() - t)*1000 / (cv::getTickFrequency() );
time = end - start;
t_duration = t_end - t_start;
ui->textEdit->append(QString("clock :")+QString::number(time));
ui->textEdit->append(QString("windows-Gettick :") + QString::number(t_duration));
ui->textEdit->append(QString("cv :") + QString::number(t));
ui->textEdit->append(QString("QT :") + QString::number(QT_t));