图像灰度化的常用三种方式及其实现

本文介绍图像处理中常见的三种灰度化方法:分量法、最大值法及加权平均法,并提供了使用C++实现的具体代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

}

转载于:https://blog.51cto.com/13662721/2089735

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值