第一次写blog,还请各位同仁多多指正,万分感谢!

图像灰度化的常用三种方法有:

1.分量法(本文以B通道为例):将彩×××像的R、G、B三分量的亮度之一作为灰度图像灰度值 Gray=B or Gray=G or Gray=R

2.最大值法:将彩×××像的R、G、B三分量亮度最大值作为灰度图像灰度值 max(R,max(G,B)) 注意max函数一次只能比较两个参数;

3.加权平均法:将彩×××像的R、G、B三分量以不同的权重进行加权平均。人眼对绿色敏感最高,对蓝色敏感最低,故采用心理学灰度公式: Gray= 0.114B+ 0.587G+ 0.299R
即是Opencv的颜色空间转换函数 : CV_BGR2GRAY

以下是示例代码实现: void cvtCOLOR(Mat src, Mat dst) { float R, G, B; for (int y = 0; y < src.rows; y++) { uchar* data = dst.ptr<uchar>(y); for (int x = 0; x < src.cols; x++) { B = src.at<Vec3b>(y, x)[0]; G = src.at<Vec3b>(y, x)[1]; R = src.at<Vec3b>(y, x)[2]; //data[x] = (int)(R * 0.299 + G * 0.587 + B * 0.114);//利用公式计算灰度值(加权平均法) data[x] = (int)max(R,max(G,B));//最大值法 data[x] = (int)(B);//分量法 } } } void main() { Mat src = imread("1.jpg", 1); Mat dst(src.rows, src.cols, CV_8UC1);//大小与原图相同的八位单通道图
** //cvtColor(src, dst, COLOR_RGB2GRAY);//加权平均法,心理学灰度公式** cvtCOLOR(src, dst); namedWindow("转换为灰度图", WINDOW_NORMAL); imshow("转换为灰度图", dst); waitKey(0);

}