文档开发者中心
我的

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

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

}

点赞
收藏
回复
分享
举报
浏览699 发布于2019-11-28 06:32未知归属地
全部评论
最多点赞
最新发布
最早发布
暂无评论
暂无评论
写回答
新增插入模板功能
一键使用模板,快速填写内容,轻松发帖~
知道了
  • 为了保障您的信息安全,请勿上传您的敏感个人信息(如您的密码等信息)和您的敏感资产信息(如关键源代码、签名私钥、调试安装包、业务日志等信息),且您需自行承担由此产生的信息泄露等安全风险。
  • 如您发布的内容为转载内容,请注明内容来源。

我要发帖子

了解社区公约,与您携手共创和谐专业的开发者社区。