opencv中测量运行时间的函数

【论文阅读1】机理引导的残差学习用于电池全生命周期状态监测 | Nature Communications 本文提出了一种机理引导的残差学习框架,用于提升电池全生命周期内荷电状态(SOC)和健康状态(SOH)的监测精度。该方法融合等效电路模型的先验知识与机器学习,设计了修正模型和补偿模型两种通用框架。实验验证表明,该方法在三种不同类型电池数据集上均表现出色,SOC和SOH估计误差较传统方法降低50%以上,且在未见工况下仍保持良好外推能力。模型具有强鲁棒性,在减少训练数据量和降低采样频率时性能稳定,并兼具物理可解释性。该框架无需离线测试和运行中校准,为电池安全监测提供了有效解决方案。 阅读详情

申明,本文非笔者原创,原文转载自:http://blog.youkuaiyun.com/ljbkiss/article/details/7378392


  最开始的C接口中的是 cvGetTickCount()和 cvGetTickFrequency(),在程序段的开始和结束时两次使用cvGetTickCount(),然后将两次的差除以cvGetTickFrequency()后就可以获得程序段的以微秒us为单位的运行时间,不是很精确但是一般足够了。

         到了2.x之后在命名空间cv中又多了几个函数,getTickCount(),getTickFrequency(),getCPUTickCount(),此时仍然可以使用上面的C接口的函数,也可以使用这几个namespace cv中的函数,两次使用getTickCount(),然后再除以getTickFrequency(),不过需要注意的是这时计算出来的是以秒s为单位的时间,这个是与上面的带cv前缀的函数的不同,而要使用更精确的计时,就需要使用getCPUTickCount(),不过现代计算机CPU的频率会随着负载而变化所以没大有必要使用该函数,可以参看函数的介绍【Also, since a modern CPU varies the CPU frequency depending on the load, the number of CPU clocks spent in some code cannot be directly converted to time units. Therefore,getTickCount is generally a preferable solution for measuring execution time.】也就是使用getTickCount就足够了。

        同时C++接口中还将上面的函数封装为了一个类TickMeter,方便使用,下面是关于TickMeter的声明和实现的源码:

  1. //contrib.hpp    
  2. class CV_EXPORTS TickMeter  
  3. {  
  4. public:  
  5.     TickMeter();  
  6.     void start();  
  7.     void stop();  
  8.   
  9.     int64 getTimeTicks() const;  
  10.     double getTimeMicro() const;  
  11.     double getTimeMilli() const;  
  12.     double getTimeSec()   const;  
  13.     int64 getCounter() const;  
  14.   
  15.     void reset();  
  16. private:  
  17.     int64 counter;  
  18.     int64 sumTime;  
  19.     int64 startTime;  
  20. };  
  21. CV_EXPORTS std::ostream& operator<<(std::ostream& out, const TickMeter& tm);  
  22.   
  23. //Spinimages.cpp      
  24. cv::TickMeter::TickMeter() { reset(); }  
  25. int64 cv::TickMeter::getTimeTicks() const { return sumTime; }  
  26. double cv::TickMeter::getTimeMicro() const { return (double)getTimeTicks()/cvGetTickFrequency(); }  
  27. double cv::TickMeter::getTimeMilli() const { return getTimeMicro()*1e-3; }  
  28. double cv::TickMeter::getTimeSec()   const { return getTimeMilli()*1e-3; }      
  29. int64 cv::TickMeter::getCounter() const { return counter; }  
  30. void  cv::TickMeter::reset() {startTime = 0; sumTime = 0; counter = 0; }  
  31.   
  32. void cv::TickMeter::start(){ startTime = cvGetTickCount(); }  
  33. void cv::TickMeter::stop()  
  34. {  
  35.     int64 time = cvGetTickCount();  
  36.     if ( startTime == 0 )  
  37.         return;  
  38.   
  39.     ++counter;  
  40.   
  41.     sumTime += ( time - startTime );  
  42.     startTime = 0;  
  43. }  
  44.   
  45. std::ostream& cv::operator<<(std::ostream& out, const TickMeter& tm){ return out << tm.getTimeSec() << "sec"; }  


 

           可以看出TickMeter仅仅是将C接口的函数进行了一下封装,不过使用时就方便多了,不用去反复gettickcount然后除以frequency了,只需要在开始时调用start();结束时调用stop(),然后如果需要以us为单位的运行时间就调用getTimeMicro(),以ms为单位的就调用getTimeMilli(),以s为单位的是getTimeSec(),而getTimeTicks()返回运行时间的tickcount,getTimeTicks()返回的是调用stop的次数,同时该类还重载了ostream,可以方便的以s为单位直接输出。

一个小例子:

  1. TickMeter tm;     
  2. tm.start();  
  3.     int col=temp.cols, row = temp.rows;  
  4.     if (temp.isContinuous())  
  5.     {  
  6.         col*=row;  
  7.         row =1;  
  8.     }  
  9.     for (i=0; i<row; ++i)  
  10.     {  
  11.         const float *pt = temp.ptr<float>(i);  
  12.         for (j=0; j<col;++j)  
  13.         {  
  14.             float mm=pt[3*j];  
  15.             mm = mm/(float)20.6;  
  16.         }  
  17.     }  
  18.     tm.stop();  
  19.     cout<<"count="<<tm.getCounter()<<",process time="<<tm.getTimeMilli()<<endl;  


【NOTE!TickMeter对象的计时是累积的,如果要分段计时的话,获取运行时间之后,下一次调用start()之前需要调用reset()将计时归零,否则获得的时间是累积运行时间】 


【002】C++ 语言核心:关键字深度解析与分类指南 auto:自动类型推导bool:布尔类型break:跳出循环或switch语句case:switch语句分支char:字符类型class:定义类const:常量continue:结束当前循环,开始下一次循环default:switch语句默认分支delete:删除对象do:do-while循环double:双精度浮点数类型else:if语句的否定分支enum:枚举类型explicit:显式构造函数export:导出符号extern:声明外部变量或函数。 阅读详情

相关推荐

【参数不确定】敏感性分析(sensitivity analysis)

【运筹学】灵敏性分析

羊肉蛋花汤的博客 14万+

OpenCV深入学习(3)--opencv中测量运行时间的函数

最开始的C接口中的是 cvGetTickCount()和 cvGetTickFrequency(),在程序段的开始和结束时两次使用cvGetTickCount(),然后将两次的差除以cvGetTickFrequency()后就可以获得程序段的以微秒us为单位的运行时间,不是很精确但是一般足够了。          到了2.x之后在命名空间cv中又多了几个函数,getTickCount(),get

968

02 HCM CPI SF集成-组织集成(一)

将员工主数据和组织数据从SAP Successfactors Employee CentraI复制到SAPERP或SAP S/4HANA,SAP SF CPI HCM集成

SAP CPI 129

vs2017上运行opencv4.3.1的时间优化问题

初学opencv,写了个简单的测试代码,发现运行时间竟然有600ms+。通过getTickCount()和getTickFrequency两个函数追踪每个opcv函数的处理时间,发现namedWindow("color1", WINDOW_NORMAL)这一个函数执行时间就有500ms,暂不知原因,做下记录。 ...

yjt1993的博客 874

异常数据(outlier data)处理基于分位数法(箱图法、箱型法)替换及删除方案

异常数据(outlier data)处理基于分位数法(箱图法、箱型法)替换及删除方案 简单统计法: 这个原则有个条件:数据需要服从正态分布。 在3倍标准差原则下,异常值如超过3倍标准差,那么可以将其视为异常值。正负3的概率是99.7%,那么距离平均值3之外的值出现的概率为P(|x-u| > 3) <= 0.003,属于极个别的小概率事件。如果数据不服从正态分布,也可以用远离平均值的多少倍标准差来描述。 分位数法(箱图法、箱型法): 并不是说从高斯分布中抽出的所有数据都符..

data+scenario+science+insight 1795

日常工作记录---在虚拟机中进行slam建图

   今天是10月24号,首先祝各位程序员们节日快乐!!!    最近一周由于实习的原因,对ROS的探索学习,停滞了一段时间,所以今天也就没什么大的进展,本篇文章仅仅记录一下,我在虚拟机中进行slam建图可行性验证的过程,本篇文章同样使用古月学院《如何在Gazebo中实现阿克曼转向车的仿真》的课程资料来进行验证    下面各条之间并没有严格的顺序关系,每一条都是独立的,都是我在验证过程中的经验或者记录:    1、在运行roslaunch bringup racecar_gazebo_rviz.lau

慕羽★的博客 4828

opencv 读取一帧时间及imshow耗时

一、前言 由于想知道自己电脑i7 使用opencv读取一帧速度,测试视频大小为480*640,发现当使用VideoCapture::read()读取一帧,并用imshow显示图像,总共需耗时15ms左右,相当于每秒66帧左右,分别对两个函数测试时,发现单读取一帧只需0.7~1.2ms,而使用imshow显示图像则函数较为严重,显示一帧需14ms左右。 二、代码 #include #incl

AP1005834的博客 1万+

swl安装无法与服务器建立链接,如何解决?

🏆本文收录于《全栈Bug调优(实战版)》专栏,主要记录项目实战过程中所遇到的Bug或因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!! 备注:部分问题/疑难杂症搜集于互联网。

**My Coding Family** 2076

Window 10 OpenCV 打开罗技(Logitech)摄像头速度慢问题解决

官网编译好的OpenCV 4.7.0库,可以用cv::CAP_ANY(默认)及cv::CAP_DSHOW等方式打开摄像头并抓取图像,摄像头打开时间为2~5秒,图像帧的分辨率越高,打开时间越长。采用最新版OpenCV 4.7.0 摄像头对罗技摄像头进行视频图像抓取时,发现存在打开摄像头问题。官网编译好的OpenCV库无法采用cv::CAP_MSMF方式打开摄像头,需要自己编译。在采用cv::CAP_MSMF打开摄像头时,需要先声明环境变量以提高摄像头加载速度。在编译时,需要勾选上“WITH_MSMF”。

3041

Linux ARM平台开发系列讲解(摄像头V4L2子系统) 2.12.7 摄像头V4L2驱动开发流程总结

1.概述前几章对摄像头V4L2驱动开发各个环节做了展开分析,这一章节就做一个汇总,用来回顾前几章得知识点,概括一下摄像头开发得流程,本次使用RK3399。2.SensorSub-device开发移植Sensor驱动位于目录下,注意到本章节所描述的是具有属性的sensor驱动,故目录下的驱动并不适用。在结构下,Sensor一般作为sub-device并通过pad与cif、isp或者mipiphy链接在一起。本章主要介绍Sensor驱动的代码[1],dts配置,及如何验证sensor5个部分。...

DSMGUOGUO的博客 3728

华为OD机试2025C卷-双十一最大花费金额[100分](Java_Python3_C++_C语言_JsNode_Go)实现100%通过率

双十一最大花费金额 - 动态规划解法 摘要:本文介绍了华为OD机试中"双十一最大花费金额"问题的动态规划解法。该问题要求在给定N件商品价格和优惠券面额X的情况下,选择若干商品使总花费不超过X且尽可能大。核心解法采用布尔型动态规划数组,记录每个金额是否可被拼出。算法时间复杂度为O(N*X),空间复杂度为O(X)。通过倒序遍历避免重复选择同一商品,最后从X向下查找第一个可达金额作为答案。文中提供了C++和Java的实现代码,并解释了与经典0-1背包问题的关系。 关键点: 问题本质是0-1背包/子集和问题的变体

2503_91057718的博客 46

openv计时类TickMeter

class CV_EXPORTS TickMeter { public: TickMeter(); void start(); void stop(); int64 getTimeTicks() const; double getTimeMicro() const; double ge

Belial计算机视觉&机器视觉专栏 6196

rk3576 点亮 LCD(eDP)

RK3576 处理器集成了对 **eDP (Embedded DisplayPort)** 接口的支持,主要用于驱动嵌入式或笔记本电脑的内置屏幕。支持 **eDP 1.3 版本协议**, 最大可支持 ****4K@120Hz**。

weixin_35723192的博客 354

OpenCV学习(6)--opencv中测量运行时间的函数

最开始的C接口中的是 cvGetTickCount()和 cvGetTickFrequency(),在程序段的开始和结束时两次使用cvGetTickCount(),然后将两次的差除以cvGetTickFrequency()后就可以获得程序段的以微秒us为单位的运行时间,不是很精确但是一般足够了。          到了2.x之后在命名空间cv中又多了几个函数,getTickCount(),get

机器视觉之家 1581

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

利用opencv里面的函数测量程序运行时间

double t = (double)cvGetTickCount();  ////代码段 ................... t = (double)cvGetTickCount() - t;  printf( "exec time = %gms\n", t/(cvGetTickFrequency()*1.e^6.) );   后面那个*1.e^6表示精确到s,而 *1000表示

1890

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

【opencv基础】测量运行时间的函数getTickCount/getCPUTickCount/getTickFrequency

函数的计算结果类型是double,单位是秒。 要使用更精确的计时,就需要使用getCPUTickCount(),不过现代计算机CPU的频率会随着负载而变化所以没大有必要使用该函数,可以参看函数的介绍【Also, since a modern CPU varies the CPU frequency depending on the load, the number of CPU clocks s...

weixin_30369087的博客 562

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

他山之石02---opencv测量运行时间的函数

原文地址来龙去脉最开始的C接口中的是 cvGetTickCount()和 cvGetTickFrequency(),在程序段的开始和结束时两次使用cvGetTickCount(),然后将两次的差除以cvGetTickFrequency()后就可以获得程序段的以微秒us为单位的运行时间,不是很精确但是一般足够了。 到了2.x之后在命名空间cv中又多了几个函数,getTickCoun

N1984的博客 478

opencv时间测量函数

OpenCV深入学习(3)--opencv中测量运行时间的函数 最开始的C接口中的是 cvGetTickCount()和 cvGetTickFrequency(),在程序段的开始和结束时两次使用cvGetTickCount(),然后将两次的差除以cvGetTickFrequency()后就可以获得程序段的以微秒us为单位的运行时间,不是很精确但是一般足够了。          到了

peterli_xue的专栏 964

测量程序运行时间;getTickCount()与getTickFrequency()

opencv里使用getTickCount()与getTickFrequency()函数记录时间;   函数解释: getTickCount()函数:它返回从操作系统启动到当前所经的计时周期数。 getTickFrequency()函数:返回CPU的频率。   =====================分割线================== 演示代码     #in...

xiachong27的博客 4397

Python调用OpenCV测试程序运行时间

OpenCV有提供测代码运行时间的函数,类似C/C++的。估计是一样的吧,看结果 importnumpyasnp importcv2ascv src=cv.imread("D:/lena.bmp") src=cv.resize(src,(1024,1024)) e1=cv.getTickCount() img1=cv.medianBl...

上善若水,为而不争 631
上一篇: 【OpenCV】图形生成算法:多边形的扫描转换
下一篇: matlab在图片上画框
ChenLee_1
博客等级 码龄17年 6199粉丝 179原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值