对RGB图像进行灰度化,通俗点说就是对图像的RGB三个分量进行加权平均得到最终的灰度值。最常见的加权方法如下:
1)Gray=B;Gray=G;Gray=R
2)Gray=max(B+G+R)
3)Gray=(B+G+R)/3
4)Gray= 0.072169B+ 0.715160G+ 0.212671R
5)Gray= 0.11B+ 0.59G+ 0.3R
第一种为分量法,即用RGB三个分量的某一个分量作为该点的灰度值
第二种方法为最大值法,将彩色图像中的三分量亮度的最大值作为灰度图的灰度值
第三种方法将彩色图像中的三分量亮度求平均得到一个灰度图;
第四种是OpenCV开放库所采用的灰度权值
第五种为从人体生理学角度所提出的一种权值(人眼对绿色的敏感最高,对蓝色敏感最低)
1 Mat rgb2grey(Mat src) 2 { 3 float R, G, B; 4 5 int nr = src.rows; // 原图像行数 6 int nc = src.cols; // 原图像列数 7 8 Mat dst(src.size(), CV_8UC1);//创建一个大小与 image 相同的八位单通道Mat图 9 10 for (int y = 0; y < nr; y++)//遍历原图像 11 { 12 uchar* data = dst.ptr<uchar>(y);//无符号字符型指针,用来指向灰度图像的每一个像素 13 14 for (int x = 0; x < nc; x++) 15 { 16 // 访问RGB图像每个像素点的三个通道:0、1、2 分别对应 B、G、R 17 B = src.at<Vec3b>(y, x)[0]; 18 G = src.at<Vec3b>(y, x)[1]; 19 R = src.at<Vec3b>(y, x)[2]; 20 21 data[x] = (int)(R * 0.3 + G * 0.59 + B * 0.11);// 加权平均法,将BGR三列合为一列 22 } 23 } 24 return dst; 25 }
时间: 2024-10-29 19:11:14