天天看點

Qt加OpenCV建構二維圖像處理界面(2)

開始寫算法咯

一開始肯定是從簡單的開始,那就從彩圖轉灰階,以及單獨顯示紅綠藍三通道圖像吧。

彩圖轉灰的原理

這是一個很有名的心理學公式:Gray = 0.2989*R + 0.5870*G + 0.1140*B。但是浮點型運算很占時間,是以我們該怎麼優化呢?大體思路是把浮點型運算轉換為整型運算,再把整型運算轉換為位移運算。那麼我們很自然的想到:Gray=(2989*R+5870*G+1140*B)/1000;但是1000不是2的整數次方,不好進行位移。為了友善位移,我們應該乘以2的整數次幂,

是以我們取2的8次方幂,來看一看:

0.2989*2^8=76.5814;

0.5870*2^8=150.272;

0.1140*2^8=29.184;這就是很通用的彩圖轉灰階的公式 Gray = (R*76 + G*150 + B*30) >> 8;我也是采用的這個方法。

上代碼

老規矩現在vs下面測試一下,看看有沒有bug以及速度如何.

Qt加OpenCV建構二維圖像處理界面(2)

結果如下:

Qt加OpenCV建構二維圖像處理界面(2)
Qt加OpenCV建構二維圖像處理界面(2)
Qt加OpenCV建構二維圖像處理界面(2)

時間還是很快的。既然vs測試好了就搬去qt上面吧。下面上qt的代碼。

Qt加OpenCV建構二維圖像處理界面(2)

測試結果自然是跟vs一樣的。

Qt加OpenCV建構二維圖像處理界面(2)
Qt加OpenCV建構二維圖像處理界面(2)

那麼單獨顯示紅綠藍單通道圖像也很簡單,比方你要單紅通道,那就把綠跟藍顯示出來。其他的類似。

先給vs測試程式:

Qt加OpenCV建構二維圖像處理界面(2)

再給qt程式:

Qt加OpenCV建構二維圖像處理界面(2)
Qt加OpenCV建構二維圖像處理界面(2)
Qt加OpenCV建構二維圖像處理界面(2)

最後qt測試一下:

Qt加OpenCV建構二維圖像處理界面(2)
Qt加OpenCV建構二維圖像處理界面(2)
Qt加OpenCV建構二維圖像處理界面(2)

好,搞定睡覺!

順便推薦一波群,群主是百度大牛,精通OpenCV,群号是736854977