從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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章