Krissi

上善若水,水善利万物而不争

[图像处理] 彩色图像转换为灰度图像

这个程序实现将彩色图像转换为灰度图像。

彩色转换为灰度使用如下公式:

Gray = R * 0.299 + G * 0.587 + B * 0.114

为了提高运算速度,将这个公式转换为整数运算:

Gray = (R * 229 + G * 587 + B * 114 + 500) / 1000

为了提高运算速度的方法还有很多,这里作为演示,不再详述。

完整代码如下:

/////////////////////////////////////////////////////////
// 程序名称:彩色图片转换为灰阶图片
// 编译环境:Visual C++ 6.0 / 2010,EasyX 20130322(beta)
// 作    者:krissi <zh@easyx.cn>
// 最后修改:2013-1-19
//
#include <graphics.h>
#include <conio.h>


// 彩色图像转换为灰度图像
void  ColorToGray(IMAGE *pimg)
{
	DWORD *p = GetImageBuffer(pimg);
	COLORREF c;

	// 逐个像素点读取计算
	for(int i = pimg->getwidth() * pimg->getheight() - 1; i >= 0; i--)
	{
		c = BGR(p[i]);
		c = (GetRValue(c) * 299 + GetGValue(c) * 587 + GetBValue(c) * 114 + 500) / 1000;
		p[i] = RGB(c, c, c);	// 由于是灰度值,无需再执行 BGR 转换
	}
}


// 主函数
void main()
{
	// 初始化绘图环境
	initgraph(640, 480);

	// 获取图像
	IMAGE img;
	loadimage(&img, _T("c:\\test.jpg"));

	// 显示原始图像
	putimage(0, 0, &img);
	
	// 按任意键转换为灰度图像
	getch();
	
	// 处理图像为灰度
	ColorToGray(&img);
	
	// 显示处理后的图像
	putimage(0, 0, &img);
	
	// 关闭绘图环境
	getch();
	closegraph();
}
分享到

添加评论