要對圖像進行識别,首先要做的将圖像從多通道顔色分量變為單通道,也就是gray色調中來,常用的方法有目下三種,
第一種
求rgb顔色風量的平均值:
G(x,y) =(r(x,y)+g(x,y)+b(x,y))/3.
第二種:
視覺心理學公式:
G(x,y)= r(x,y)*299 + g(x,y)*587 + b(x,y)*114/1000
還有一種:
G(x,y) = r(x,y)*0.11 + g(x,y)*0.59 + b(x,y)*0.3;
第三種: Adobe Photoshop 采取的公式
Adobe RGB (1998) [gamma=2.20]
Gray = (R^2.2 * 0.2973 + G^2.2 * 0.6274 + B^2.2 * 0.0753)^(1/2.2)
速度依次變慢,效果逐漸變好.
采用第二種效果進行将彩色圖檔灰階化:(關鍵代碼)
1 for(int i=0;i<cinfo.image_width;i++) {
2 color_r = (int)buffer[0][i*3];
3 color_g = (int)buffer[0][i*3+1];
4 color_b = (int)buffer[0][i*3+2];
5 var_gray = 0.11*color_r+0.59*color_g+0.3*color_b;
6 if(var_gray<0) var_gray=0;
7 //else var_gray =255;
8 buffer[0][i*3]=(unsigned char)(var_gray&0xff);
9 buffer[0][i*3+1]=(unsigned char)(var_gray&0xff);
10 buffer[0][i*3+2]=(unsigned char)(var_gray&0xff);
11 }
效果圖:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5iNwEDN3UWNxgjNxQmZiBjZxYzX3EDOyETM2IzLcFDMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
一般進過從多通道顔色分量處理之後,就需要對圖像進行腐蝕,然後得到二值化圖像。需要設定一個門檻值,進行單純的判斷,這是最簡單的方式
1 for(int i=0;i<cinfo.image_width;i++) {
2 color_r = (int)buffer[0][i*3];
3 color_g = (int)buffer[0][i*3+1];
4 color_b = (int)buffer[0][i*3+2];
5 var_gray = 0.11*color_r+0.59*color_g+0.3*color_b;
6 if(var_gray<128) var_gray=0;
7 else var_gray =255;
8 buffer[0][i*3]=(unsigned char)(var_gray&0xff);
9 buffer[0][i*3+1]=(unsigned char)(var_gray&0xff);
10 buffer[0][i*3+2]=(unsigned char)(var_gray&0xff);
11 }
效果圖: