【引言】在圖像預處理階段,對彩色圖像灰度化、二值化是常見的處理方式。一般是先對圖像作灰度化,再作二值化,它們可以在特定場景發揮出功效,文本作梳理總結。數組
每一個像素一般是由紅(R)、綠(G)、藍(B)三個份量來表示的,份量介於(0,255)。RGB圖像與索引圖像同樣均可以用來表示彩色圖像。與索引圖像同樣,它分別用紅(R)、綠(G)、藍(B)三原色的組合來表示每一個像素的顏色。但與索引圖像不一樣的是,RGB圖像每個像素的顏色值(由RGB三原色表示)直接存放在圖像矩陣中,因爲每一像素的顏色需由R、G、B三個份量來表示,M、N分別表示圖像的行列數,三個M x N的二維矩陣分別表示各個像素的R、G、B三個顏色份量。RGB圖像的數據類型通常爲8位無符號整形,一般用於表示和存放真彩色圖像,固然也能夠存放灰度圖像。函數
灰度是指只含亮度信息,不含色彩信息的圖像。黑白照片就是灰度圖,特色是亮度由暗到明,變化是連續的。要表示灰度圖,就須要把亮度值進行量化spa
使用灰度圖的好處:.net
① RGB的值都同樣,即減小了計算量。code
② 圖像數據即調色板索引值,就是實際的RGB值,也就是亮度值。blog
③ 由於是256色調色板,因此圖像數據中一個字節表明一個像素,很整齊。索引
因此,作圖像處理時都採用灰度圖。io
是將圖像上的像素點的灰度值設置爲0或255,也就是將整個圖像呈現出明顯的黑白效果。圖像處理
將256個亮度等級的灰度圖像經過適當的閥值選取而得到仍然能夠反映圖像總體和局部特徵的二值化圖像。在數字圖像處理中,二值圖像佔有很是重要的地位。class
首先,圖像的二值化有利於圖像的進一步處理,使圖像變得簡單,並且數據量減少,能凸顯出感興趣的目標的輪廓。
其次,要進行二值圖像的處理與分析,首先要把灰度圖像二值化,獲得二值化圖像。
下程序能夠實現圖像的二值化:
/************************************** * * 函數名: * cvBinaryEx * 參 數: * imgSrc - 進行銳化的圖像 * 返回值: * 成功銳化返回TRUE,不然返回false; * 說 明: * * 對圖進行二值化 * ************************************/ bool cvBinaryEx(IplImage *imgSrc) { IplImage* img = cvCreateImage(cvGetSize(imgSrc),imgSrc->depth,imgSrc->nChannels); CvScalar s; int sum=0; for (int i=0; i < imgSrc->height; i++) { for (int j=0; j < imgSrc->width; j++) { s = cvGet2D(imgSrc,i,j); sum = (s.val[0]+s.val[1]+s.val[2])/3; if (sum > 128) { s.val[0]=s.val[1]=s.val[2]=255; cvSet2D(imgSrc,i,j,s); } else { s.val[0]=s.val[1]=s.val[2]=0; cvSet2D(imgSrc,i,j,s); } } } return true; }
即它的文件結構比較複雜,除了存放圖像的二維矩陣外,還包括一個稱之爲顏色索引矩陣MAP的二維數組。MAP的大小由存放圖像的矩陣元素值域決定,如矩陣元素值域爲[0,255],則MAP矩陣的大小爲256Ⅹ3,用MAP=[RGB]表示。MAP中每一行的三個元素分別指定該行對應顏色的紅、綠、藍單色值,MAP中每一行對應圖像矩陣像素的一個灰度值,如某一像素的灰度值爲64,則該像素就與MAP中的第64行創建了映射關係,該像素在屏幕上的實際顏色由第64行的[RGB]組合決定。也就是說,圖像在屏幕上顯示時,每一像素的顏色由存放在矩陣中該像素的灰度值做爲索引經過檢索顏色索引矩陣MAP獲得。索引圖像的數據類型通常爲8位無符號整形(int8),相應索引矩陣MAP的大小爲256Ⅹ3,所以通常索引圖像只能同時顯示256種顏色,但經過改變索引矩陣,顏色的類型能夠調整。索引圖像的數據類型也可採用雙精度浮點型(double)。索引圖像通常用於存放色彩要求比較簡單的圖像,如Windows中色彩構成比較簡單的壁紙多采用索引圖像存放,若是圖像的色彩比較複雜,就要用到RGB真彩色圖像。
參考:https://blog.csdn.net/timidsmile/article/details/6681668
https://blog.csdn.net/iamchenxin2014/article/details/70805928