OpenCV之计算时间差


一、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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值