C#数字图像处理的方法2014-04-14 cnblogs 初行本文主要通过彩色图象灰度化来介绍C#处理数字图像的3种方法,Bitmap类、BitmapData类和 Graphics类是C#处理图像的的3个重要的类。Bitmap只要用于处理由像素数据定义的图像的对象,主要方法和属性如下:GetPixel方法和SetPixel方法,获取和设置一个图像的指定像素的颜色。PixelFormat属性,返回图像的像素格式。Palette属性,获取或折纸图像所使用的颜色调色板。Height属性和Width属性,返回图像的高度和宽度。LockBits方法和UnlockBits方法,分别锁定和解锁系统内存中的位图像素。BitmapData对象指定了位图的属性:Height属性,被锁定位图的高度。Width属性,被锁定位图的宽度。PixelFormat属性,数据的实际像素格式。Scan0属性,被锁定数组的首字节地址。Stride属性,步幅,也称扫描宽度。
彩色图象灰度化24位彩色图象每个像素用3个字节表示,每个字节对应着R、G、B分量的亮度(红、绿、蓝)。当3个 分量不想同时表现为灰度图像。下面有三种转换公式:

Gray(I,j)为转换后的灰度图像在(I,j)点出的灰度值。由于人眼对颜色的感应不同,有了下面的转 换公式:

观察发现绿色所占比重最大,所以转换时直接使用G值作为转换结果:

图像处理的3种方法分别是:提取像素法、内存法和指针法,它们各自有各自的特点。
提取像素法使用的是GDI+中的Bitmap.GetPixel和Bitmap.SetPixel方法。
if (bitmap != null){newbitmap = bitmap.Clone() as Bitmap;Color pixel;int ret;for (int x = 0; x < newbitmap.Width; x++){for (int y = 0; y < newbitmap.Height; y++){pixel = newbitmap.GetPixel(x, y);ret = (int)(pixel.R * 0.299 + pixel.G * 0.587 + pixel.B * 0.114);newbitmap.SetPixel(x, y, Color.FromArgb(ret, ret, ret));}}pictureBox1.Image = newbitmap.Clone() as Image;}