MFC图像处理

最近在上付老师数字图像处理的课程,应老师要求进行使用基于MFC对数字图像处理的各种方法的实现,这里对自己的实现方法进行一段简单的记录》

首先MFC导入的图片是BMP格式,详细环境搭建参考付老师的文章:

02. 基于MFC读取并显示一幅BMP图像_mfc 显示bmp-CSDN博客

环境搭建好以后,我们就可以写封装实现图像处理的函数了。

由于传入的参数基本一至,且每个图像处理单独封装,这里直接介绍每个函数要传入的变量,如果不理解还请参考上述付老师的文章。

CDC* pDC                         //画板
unsigned char* img_data          //原始图像存储
int bmpWidth                     //图片的宽度(基于分辨率)
int bmpHeight                    //图片的高度(基于分辨率)
int lineByte                     //遍历图片每一行的总字节数
int offset_left                  //要绘制图片的起始位置X(相较于MFC左上角)
int offset_top                   //要绘制图片的起始位置Y(相较于MFC左上角)



//灰度原图
void Grey(CDC* pDC, unsigned char* img_data, int bmpWidth, int bmpHeight, int lineByte, int offset_left, int offset_top)
{
	unsigned int bluce = 0; //图像灰度化
	unsigned char* img_line = img_data;
	for (int i = 0; i < bmpHeight; i++)
	{
		for (int k = 0; k < bmpWidth; k++)
		{
			bluce = 0.3 * img_line[3 * k + 2] + 0.59 * img_line[3 * k + 1] + 0.11 * img_line[3 * k + 0];
			pDC->SetPixel(k + offset_left, 2 * bmpHeight + 1 - i + offset_top, RGB(bluce, bluce, bluce));
		}
	img_line += lineByte;
	}
}

由于我们保存的图片数组是将该像素点的R,G,B三原色值保存,定义一个int类型的数值存放0~255的256级灰度图。灰度值算法采用F = (0.3 * B +0.59 * G + 0.11 * R)得到当前像素点的灰度值。

然后将图像绘制在MFC框架结果上。

原始图像:                                                              灰度原始图:

                                    

取反处理:

将图片0~255的像素值用255减当前像素值:

//取反处理
void Opposite(CDC* pDC, unsigned char* img_data, int bmpWidth, int bmpHeight, int lineByte, int offset_left, int offset_top)
{
	unsigned char red, green, blue = 0;
	unsigned char* img_line = img_data;
	for (int i = 0; i < bmpHeight; i++)
	{
		for (int k = 0; k < bmpWidth; k++)
		{
			//取反处理
			blue = 255 - img_line[3 * k + 0] - 1;
			green = 255 - img_line[3 * k + 1] - 1;
			red = 255 - img_line[3 * k + 2] - 1;
			pDC->SetPixel(k + bmpWidth + offset_left + 1, bmpHeight - 1 - i + offset_top, RGB(red, green, blue));
		}
		img_line += lineByte;
	}
}

指数处理:

将图片亮的部分对比度降低,加大图片较暗部分对比度和对比情况。

//Log处理
void Log(CDC* pDC, unsigned char* img_data, int
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值