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

原创 2012年03月21日 16:31:15

          最开始的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的声明和实现的源码:

//contrib.hpp  
class CV_EXPORTS TickMeter
{
public:
	TickMeter();
	void start();
	void stop();

	int64 getTimeTicks() const;
	double getTimeMicro() const;
	double getTimeMilli() const;
	double getTimeSec()   const;
	int64 getCounter() const;

	void reset();
private:
	int64 counter;
	int64 sumTime;
	int64 startTime;
};
CV_EXPORTS std::ostream& operator<<(std::ostream& out, const TickMeter& tm);

//Spinimages.cpp	
cv::TickMeter::TickMeter() { reset(); }
int64 cv::TickMeter::getTimeTicks() const { return sumTime; }
double cv::TickMeter::getTimeMicro() const { return (double)getTimeTicks()/cvGetTickFrequency(); }
double cv::TickMeter::getTimeMilli() const { return getTimeMicro()*1e-3; }
double cv::TickMeter::getTimeSec()   const { return getTimeMilli()*1e-3; }    
int64 cv::TickMeter::getCounter() const { return counter; }
void  cv::TickMeter::reset() {startTime = 0; sumTime = 0; counter = 0; }

void cv::TickMeter::start(){ startTime = cvGetTickCount(); }
void cv::TickMeter::stop()
{
	int64 time = cvGetTickCount();
	if ( startTime == 0 )
		return;

	++counter;

	sumTime += ( time - startTime );
	startTime = 0;
}

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为单位直接输出。

一个小例子:

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;


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

opencv中的getTickCount和getTickFrequency计算时间

opencv中的getTickCount和getTickFrequency计算时间
  • u013476464
  • u013476464
  • 2015年01月05日 11:14
  • 9020

open cv+C++错误及经验总结(三)

1.We will iterate through them via pointers so the total number of elements depends from this number...
  • ningyaliuhebei
  • ningyaliuhebei
  • 2014年02月19日 17:43
  • 3107

opencv测试程序

  • 2013年09月25日 20:11
  • 2KB
  • 下载

ffmpeg解码+opencv显示+时间测试

/** * 抽取ffmpeg中的函数接口实现视频解码,再通过Opencv中的函数接口播放 */ #define _CRTDBG_MAP_ALLOC #include #define __STDC...
  • tkp2014
  • tkp2014
  • 2015年07月09日 13:34
  • 639

OpenCV 利用getTickCount()与getTickFrequency()计算执行时间

其实这是个很简单的应用,贴出来是因为我经常能用到这两个函数,顺便写一下吧。double t1 = (double)getTickCount(); . . . double t2 = (double)g...
  • chaipp0607
  • chaipp0607
  • 2017年05月01日 16:37
  • 1622

opencv计算运行时间

double t = (double)cvGetTickCount(); //  算法过程 t = (double)cvGetTickCount() - t; printf( "run time...
  • chenbang110
  • chenbang110
  • 2013年06月27日 10:44
  • 7873

OpenCV 测试程序

就用载入并显示一张图片到窗口的程序,来测试配置。 新建一个空项目的控制台应用程序,新建一个cpp文件。 #include #include #include using namespace ...
  • Eroslol
  • Eroslol
  • 2016年09月12日 16:24
  • 566

测试opencv是否安装好的程序

  • 2013年08月21日 22:45
  • 5.03MB
  • 下载

opencv2学习(六)——耗费时间统计函数getTickCount()

参考文献:opencv2计算机视觉编程手册 为防止忘记,故写下此篇博客 cv::getTickCount()可以用来测量一段代码的运行时间,这个函数返回从上次开机算起的时钟周期数。 由于...
  • xumi13
  • xumi13
  • 2016年10月30日 21:26
  • 1419

opencv中测量运行时间的函数

申明,本文非笔者原创,原文转载自:http://blog.csdn.net/ljbkiss/article/details/7378392   最开始的C接口中的是 cvGetTic...
  • carson2005
  • carson2005
  • 2015年03月15日 15:42
  • 6510
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:OpenCV深入学习(3)--opencv中测量运行时间的函数
举报原因:
原因补充:

(最多只允许输入30个字)