開始寫算法咯
一開始肯定是從簡單的開始,那就從彩圖轉灰階,以及單獨顯示紅綠藍三通道圖像吧。
彩圖轉灰的原理
這是一個很有名的心理學公式: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以及速度如何.
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICM38CXlZHbvN3cpR2Lc1TPB10QGtWUCpEMJ9CXsxWam9CXwADNvwVZ6l2c052bm9CXUJDT1wkNhVzLcRnbvZ2Lc1TT61keNR1Y5hmMMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2LcRHelR3LcJzLctmch1mclRXY39DOwcjMzgDN0EzNwkDM4EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
結果如下:
時間還是很快的。既然vs測試好了就搬去qt上面吧。下面上qt的代碼。
測試結果自然是跟vs一樣的。
那麼單獨顯示紅綠藍單通道圖像也很簡單,比方你要單紅通道,那就把綠跟藍顯示出來。其他的類似。
先給vs測試程式:
再給qt程式:
最後qt測試一下:
好,搞定睡覺!
順便推薦一波群,群主是百度大牛,精通OpenCV,群号是736854977