第一次写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);

}