基于mfc数字图像处理的小软件pdd-量化灰度图像

本文介绍如何使用MFC的CImage类进行数字图像处理,特别是灰度图像的量化操作。通过将256级灰度图像简化为较低级别,如8级,观察量化后的图像效果。内容包括添加按钮、事件响应函数的设置,以及具体量化算法的实现,例如将灰度值除以3并四舍五入到最近的量化等级。
摘要由CSDN通过智能技术生成

这次的内容很简单啦,是量化,反正学过数字图像处理的都应该知道这些都是必做的,本来一张灰度图像的灰度级是256,我们现在把灰度级设的更低,然后看图片的效果,还是跟以前一样,先看效果。

当然和以前一样,还是baby的图片。右边为量化为8个灰度级的效果。

当然,首先还是添加按钮:

这个过程很简单,不会的朋友看我前面的博客就应该很清楚了。

然后为这几个按钮添加事件响应函数,也和前面的过程一样,我就不再多说了。那么,主要的我就来说一下量化的过程吧。

举个例子,如果需要的灰度级是4的话,那么自然的想到为0,1,2,3,我的算法是原先的灰度级/3,然后得到原来的灰度级相对应的,比如1对应的为85,那么在(85-85/2,85+85/2]的区间,灰度级都应该是1,所以我以这个为例,贴出下列代码:

void ChangeColor::Quantization_4()
{
	int i, j;

	int nRowBytes = GetPitch();//图像每一行的字节数,注意这个值一般是负数
	int nWidth = GetWidth();
	int nHeight = GetHeight();

	int nClrs = GetBPP() / 8;
	LPBYTE p = (LPBYTE)GetBits();


	for (i = 0; i < nHeight; i++) //第i行
	{
		for (j = 0; j < nWidth; j++) //第j列
		{


			p[i*nRowBytes + j*nClrs + 0] = (int)((double)p[i*nRowBytes + j*nClrs + 0] / 85.0 + 0.5) * 85;
			p[i*nRowBytes + j*nClrs + 1] = (int)((double)p[i*nRowBytes + j*nClrs + 1] / 85.0 + 0.5) * 85;
			p[i*nRowBytes + j*nClrs + 2] = (int)((double)p[i*nRowBytes + j*nClrs + 2] / 85.0 + 0.5) * 85;

		}

	}
}
上述代码很清楚的解决了变为灰度级为4的图像,其他的灰度级类似像这样处理即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值