灰度化图像

图像的灰度化

因为三通道图像相对来说处理比较麻烦,所以往往要转换成灰度图像,虽然OPENCV也有自带的函数,不过也需要掌握几种常见的灰度化的方法。

灰度化的核心本质

把三通道的图片转化成单通道。开始写的时候我把三个通道都改成同一个数字然后被老师批评了哈哈哈哈。

平均化灰度
Mat gray1(Mat &img) {
	Mat re = Mat(img.rows, img.cols, CV_8UC1, Scalar(0));
	for (int i = 0; i < img.rows; ++i) {
		for (int j = 0; j < img.cols; ++j) {
			int aver = (img.at<Vec3b>(i, j)[0] + img.at<Vec3b>(i, j)[1] + img.at<Vec3b>(i, j)[2]) / 3;
			re.at<uchar>(i, j) = aver;
		}
	}
	return re;
}

通过光栅扫描,对于每个像素点把三个通道的颜色加起来除以三就行。他这里把三个uchar加起来似乎就会自动提升到整数,很是神奇。

加权灰度化
Mat gray2(Mat &img) {
	Mat re = Mat(img.rows, img.cols, CV_8UC1, Scalar(0));
	for (int i = 0; i < img.rows; ++i) {
		for (int j = 0; j < img.cols; ++j) {
			int B = img.at<Vec3b>(i, j)[0];
			int G = img.at<Vec3b>(i, j)[1];
			int R = img.at<Vec3b>(i, j)[2];
			re.at<uchar>(i, j) = (int)(0.3 * R + 0.59 * G + 0.11 * B);
		}
	}
	return re;
}

这个就和上面的差不多,只是出现了权重,0.3 * R + 0.59 * G + 0.11 * B,加强了绿色弱化了蓝色。同样这里也有一个需要注意的地方,三通道存储像素点并不是RGB而是BGR,说是很多相机照片是这个格式,所以他就用了这样的形式。

然后还有最大值最小值之类的灰度化,就是三个值取最大值最小值就行。

上述代码的效果是输入一个三通道的图像,返回一个单通道的图像。三通道就是三张单通道的图片叠加出来的效果。需要说明的是,在三通道图像上如果三个通道数值是一样的,那么图像也是呈现灰色,但是这算不得灰度化图像。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值