opencv定时器

本文介绍了一个用于测量代码运行时间的方法,特别关注了精度达到微妙级别的测量。通过使用TickMeter类,文章提供了详细的实现步骤和注意事项,并附带了一个具体的示例。

测量代码运行时间,精度为us


参考:opencv中测量运行时间的函数


TickMeter类

官方说明文档:http://fossies.org/dox/opencv-3.0.0/classTickMeter.html

(并没有加入opencv的体系,需要引用samples\gpu下的tick_meter.hpp)

用法:创建对象,在开始时调用start();结束时调用stop(),然后如果需要以us为单位的运行时间就调用getTimeMicro(),以ms为单位的就调用getTimeMilli(),以s为单位的是getTimeSec()……先暂停一下,经过实测,发现代码竟然是错误的!

tick_meter.hpp里面的秒、毫秒、微妙计时函数有误!应该修改为

double TickMeter::getTimeSec() const { return (double)getTimeTicks()/cv::getTickFrequency(); }
double TickMeter::getTimeMilli() const { return getTimeSec()*1e3; }
double TickMeter::getTimeMicro() const { return getTimeMilli()*1e3; }
因为(double)getTimeTicks()/cv::getTickFrequency()计算获得的时间是以秒为单位的! 没想到官方的代码也会出错啊,而且这个TickMeter类写得也不规范,不建议使用!


TickMeter对象的计时是累积的,如果要分段计时的话,获取运行时间之后,下一次调用start()之前需要调用reset()将计时归零,否则获得的时间是累积运行时间;也可以记录每次的计时结果,与上一次相减。

该类是对getTickCount函数的封装,另外,opencv还有一个更加精确的定时函数getCPUTickCount

实例:

TickMeter tm;     
tm.start();  
    int col=temp.cols, row = temp.rows;  
    if (temp.isContinuous())  
    {  
        col*=row;  
        row =1;  
    }  
    for (i=0; i<row; ++i)  
    {  
        const float *pt = temp.ptr<float>(i);  
        for (j=0; j<col;++j)  
        {  
            float mm=pt[3*j];  
            mm = mm/(float)20.6;  
        }  
    }  
    tm.stop();  
    cout<<"count="<<tm.getCounter()<<",process time="<<tm.getTimeMilli()<<endl; 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值