循序渐进之(一)空间域图像增强之基本灰度变换

本文介绍了数字图像处理中的空间域图像增强,特别是基本灰度变换,包括图像反转和对数变换等。通过opencv与c++实现,旨在提升图像的可读性和机器理解性。
摘要由CSDN通过智能技术生成

 

                                   循序渐进之(一)空间域图像增强之基本灰度变换

 

 基本想法是在冈萨雷斯第二版《数字图像处理》的指导结构下,用opencv与c++循序渐进。

 图像增强概览:图来自于图像增强之局部增强(更新中)

这一节是3.2章节的内容,图像增强中的空域中的图像灰度变换,简单解释是怎样将现有图像处理成更有利于人们和机器理解的方式和样式。主要有图像反转、对数变换、幂次变换等,主要就是在单个像素的层面上对于图像进行操作,原理大同小异,算法不同就是对于单个像素操作的数学公式不同。

以下为图像反转代码:

#include<iostream>
#include<opencv.hpp>
using namespace std;
using namespace cv;
int main()
{
	Mat a = imread("E:\\33.jpg");
	if (!a.data)
	{
		cout << "Please check out this image,make sure it exits";
		
		waitKey();
	}
	imshow("原图", a);
	/*①第一种方法,一开始没找到怎样将RGB三通道图变成单通道的方法,所以比较笨的将RGB变成每个通道数值都相等的三通道图,然后split一路出来。。。
	Mat b(a.size(),CV_8UC3);
	for (int i = 0; i < a.rows; i++)
		for (int j = 0; j < a.cols; j++)
			b.at<Vec3b>(i, j) = 0.2*a.at<Vec3b>(i, j)[0] + 0.3*a.at<Vec3b>(i, j)[1] + 0.5*a.at<Vec3b>(i,j)[2];
	imshow("加权图", b);
	vector<Mat> channels;
	split(b, channels);
	Mat c = channels[0];
	Mat d=c;
	imshow("灰度图", c);
	*/
	/*②第二种方法,可以将RGB三通道直接加权成uchar单通道图,比较省事*/
	Mat b(a.size(), CV_8U);
	for (int i = 0; i < a.rows; i++)
		for (int j = 0; j < a.cols; j++)			
	         b.at<uchar>(i, j) = 0.2*a.at<Vec3b>(i, j)[0] + 0.3*a.at<Vec3b>(i, j)[1] + 0.5*a.at<Vec3b>(i, j)[2];
	imshow("加权灰度图", b);
	vector<Mat> channels;
	split(b, channels);
	Mat c = channels[0];
	Mat d = c;//这个split没有实际作用
	imshow("灰度图", c);
	for (int i = 0; i < c.rows; i++)
		for (int j = 0; j < c.cols; j++)
			d.at<uchar>(i,j) = 255 - c.at<uchar>(i,j);
	imshow("反转图",d);
	waitKey(0);
}

 

第一种方法

 

第二种方法

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Coming_is_winter

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值