Qt中利用OpenCV顯示圖片和視頻時,需要將OpenCV中的Mat或IplImage結構轉換為Qt中QImage結構,轉換時需要注意的地方是OpenCV中和Qt中關於三原色的排列的不同:OpenCV中是以BGR的順序排列,Qt中是以RGB的順序排列,兩種格式在轉換時如果沒注意到這點,就會出現問題,如下圖:
上圖是讀取的美劇《總統一家》中的一集,mkv格式的(OpenCV2中增加了對更多視頻格式的支持),右邊的色彩還原是正確的。
可以看到,由於OpenCV中是BGR排列,Qt中是RGB排列,如果沒有經過轉換,直接構造QImage對象的話,紅色通道和藍色通道會發生對調:
最直觀的,上圖中第一夫人的紅裙在左邊成了藍色的。
轉換 的方法就是調用OpenCV中的cvCvtColor函數,如下形式
cvCvtColor(&img,&img,CV_BGR2RGB); //img是IplImage類型
這裡還有個更好的方法,是網上一個大神寫的專門將Mat結構轉換為QImage結構的函數,下載地址如下:
---------------------------------------------------------------
免費下載地址在 http://linux.linuxidc.com/
用戶名與密碼都是www.linuxidc.com
具體下載目錄在 /2013年資料/4月/22日/Qt中使用OpenCV顯示圖片時,Mat結構轉換為QImage結構的問題/
---------------------------------------------------------------
調用方式也很簡單: QImage image = MatToQImage(img); //img是Mat類型