opencv 计算程序运行时间

来源:互联网 发布:火狐视频下载php 编辑:程序博客网 时间:2024/06/06 11:02

先讲讲inline 函数 

inline 函数又称 "内联函数", 他主要运用在函数体重执行的语句较少但又会被频繁调用的函数中, 例如调用函数输出50000条"hello, world!":



#include<iostream>using namespace std;  void fun(){         cout << "Hello, world!\n";}int main(){int i;for (i = 0; i<50000; i++)fun();             //短时间内将会被调用50000次return 0;}

fun函数只有一个功能, 就是输出一条 "Hello, world!", 所以在main函数内我们通过控制for循环的方式调用10000次fun函数来实现这个功能, 那么这么做有什么不妥呢?
    
    先来从大致上了解下函数的调用过程:
        在一个函数中调用另一个函数, 系统首先会中断原函数的执行, 在中断时需要做一些现场保护工作, 记录当前函数的中断时的一些信息以便被调函数执行完后原函数的继续执行, 记录完成后才会把执行的流程转向被调函数, 等被调函数执行完后再返回原函数继续执行。
        
    对于内容比较多的函数, 这点中断时的这点时间开销基本上是可以忽略不计的, 但是当调用十分频繁执行的内容又较少时, 这点时间久不能忽视了, 即便目前的计算机性能越来越好, 但是在能够更快的情况下我们还是尽量让他更快一些。
    
    inline函数的作用就是优化这些将会被频繁调用的函数, 他就相当于把这些inline函数中的函数体直接复制到被调用的函数中一样, 不再使其频繁的中断。 定义inline函数非常简单, 只要在定义时在前面加上 inline 关键字即可, 例如把上面的 输出 50000 次 "Hello, world!" 的程序改成 inline 函数的形式并且用opencv计算内联与否的时间差异:


#include<iostream>#include <opencv2/opencv.hpp>using namespace cv;inline void fun(){std::cout << "Hello, world!\n";}int main(){int i;double t = (double)getTickCount();for (i = 0; i<50000; i++)fun();             //短时间内将会被调用50000次t = ((double)getTickCount() - t) / getTickFrequency();printf("averagetime:%f\n", t);return 0;}


注:必须要包含<opencv2/opencv.hpp>,否则找不到计算时间函数,using namespace cv;不可置于其上否则找不到。

如果不用,getTickCount代替原函数


可以测试出内联后时间减少1秒左右!!!







0 0