一、OpenCV3的函数
1.函数原型
int64 cv::getTickCount ()
:返回CPU的时钟周期数double cv::getTickFrequency ()
:返回CPU一秒走过的时钟周期数。
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main()
{
// 记录起始的时钟周期数
double time = (double)getTickCount();
// 等待一秒
namedWindow("wait");
waitKey(1000);
// 计算时间差
time = ((double)getTickCount() - time) / getTickFrequency();
// 输出运行时间
cout << "运行时间:" << time << "秒\n";
// 运行时间:1.33015秒
return 0;
}
2.例子:每隔interval秒输出一次"ok"
因为time在同一秒内很多次都是interval的倍数,所以我们得让它在同一秒只输出一个数字,所以我设置一个触发器timeTrigger
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main()
{
//输出ok的时间间隔
int interval = 5;
//计录程序开始执行时的CPU的时钟周期
double time0 = static_cast<double>(getTickCount());
//interval触发器:用来让每隔interval秒输出一次
bool timeTrigger = false;
while (1)
{
//程序当前走过的时间(秒)
int time = (int)(((double)getTickCount() - time0) / getTickFrequency());
//当执行程序走过的时间是interval的倍数(非0)并且触发器没用被触发时才输出
if (time != 0 && time % interval == 0 && timeTrigger == false)
{
timeTrigger = true;
printf("[ok]:%d秒\n", time);
}
//当不是interval秒的倍数时且timeTrigger被触发后才重置触发器
else if (time % interval != 0 && timeTrigger == true)
{
timeTrigger = false;
}
}
return 0;
}
二、使用c++的chrono
- 时间点的类型:
chrono::steady_clock::time_point
- 时间点获取当前时间:
chrono::steady_clock::now()
- 时间差的类型:
chrono::duration<double>
- 获取两个时间点的时间差:
chrono::duration_cast<chrono::duration<double>>(t2 - t1);
- 输出时间差:
time_used.count()
#include <iostream>
#include <opencv2/opencv.hpp>
#include <chrono>
using namespace std;
using namespace cv;
int main()
{
chrono::steady_clock::time_point t1 = chrono::steady_clock::now();
namedWindow("wait");
waitKey(1000);
chrono::steady_clock::time_point t2 = chrono::steady_clock::now();
chrono::duration<double> time_used = chrono::duration_cast<chrono::duration<double>>(t2 - t1);
cout << "运行时间:" << time_used.count() << " seconds." << endl;
return 0;
}