从IplImage到QImage的转化看性能优化

      最近对VP的数据协议进行了反思,昨天进行了重大改进,去掉了智能指针的使用,在模块内部使用了缓存区概念,既方便了内存管理又极大地提高了效率,性能检测结果对比如下:

     改进之前

     改进之后:

上述所有的数字都以cpu时钟周期为单位。

 

      运行结果还是不太满意,继续追踪各个模块的运行时间,结果大大出乎意料,从IplImage到QImage的转化函数居然这么耗时,性能检测结果如下:

注意其中的CvImage2QImage的执行时间。 跟踪那段函数代码,使用的两重循环执行图片的转化:

     下面是改进的代码:

 

      改进后的性能检测结果如下:

     原因分析

     第一种情况要差不多23个时钟周期,然后第二个却只需要4个时钟周期,效率差距这么大。原因在于opencv中图片存储是按行存取,所以行优先处理可以更加符合程序的局部性原理。

    尾声

    对于一个实时性强的系统每秒处理几十帧,从一帧处理147个时钟周期到16个时钟周期。。。

 

一种更好的改进:

通过QImage和IplImage共享内存,需要注意的是,QT中的的图片是RGB格式,而OpenCV摄像头获得图片是BGR格式。具体实现代码如下:

经测试,对于640*480的帧图片,转化为qimage只需要五个时钟周期左右。

add: 2011/1/14  by RYF 

发布了218 篇原创文章 · 获赞 94 · 访问量 95万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章