C#图像处理

  1. 图像处理常用类

         Bitmap只要用于处理由像素数据定义的图像的对象,主要方法和属性如下: GetPixel方法和SetPixel方法,获取和设置一个图像的指定像素的颜色。

        PixelFormat属性,返回图像的像素格式。

         Palette属性,获取或折纸图像所使用的颜色调色板。

         Height属性和Width属性,返回图像的高度和宽度。

         LockBits方法和UnlockBits方法,分别锁定和解锁系统内存中的位图像素。

       BitmapData对象指定了位图的属性:

         Height属性,被锁定位图的高度。

         Width属性,被锁定位图的宽度。

         PixelFormat属性,数据的实际像素格式。

        Scan0属性,被锁定数组的首字节地址。

       Stride属性,步幅,也称扫描宽度。

       Graphics类提供了对象绘制到现实设备的方法。

         创建Graphics对象的方法如下:

         // Create image.
         Image imageFile = Image.FromFile("SampImag.jpg");

        // Create graphics object for alteration.
         Graphics newGraphics = Graphics.FromImage(imageFile);

         Graphics常用方法:

        Clear(Color)   清除整个绘图面并以指定背景色填充。

        Dispose()      释放此 Graphics 使用的所有资源。

        DrawIcon(Icon, Int32, Int32)    在指定坐标处绘制由指定的 Icon 表示的图像。

        DrawIcon(Icon, Rectangle)    在 Icon 结构指定的区域内绘制指定的 Rectangle 表示的图像。

        DrawImage(Image, Int32, Int32)    在由坐标对指定的位置,使用图像的原始物理大小绘制指定的图像。

        Graphics属性:

         DpiX属性, 获取Graphics的水平分辨率。

         DpiY属性,获取Graphics的垂直分辨率。

         Transform属性,获取或设置此Graphics的几何世界转换的副本。

         TextContrast属性,获取或设置文本的灰度校正值。

        详细请见:https://docs.microsoft.com/zh-cn/dotnet/api/system.drawing.graphics?view=netframework-4.7.2

  2.  彩色图像灰度化

      24位彩色图像每个像素用3个字节表示,每个字节对应着R、G、B分量的亮度(红、绿、蓝)。当3个分量不想同时表现为       灰度图像。转化方式:

    平均法:将同一像素位置3个通道RGB的值进行平均

     Gray(i,j)=[R(i,j)+G(i,j)+B(i,j)]/3

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

    Gray(i,j)=0.299*R(i,j)+0.587*G(i,j)+0.114*B(i,j)

   Gray(i,j)=G(i,j)

    图像处理的3种方法为:

       使用Bitmap.GetPixel()和Bitmap.SetPixel()

  • 提取像素法
         /// 图像灰度化
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button2_Click(object sender, EventArgs e)
        {
            Image imageFile = (Bitmap)Image.FromFile(@"C:\Users\Administrator.USER-20151012WY\Desktop\WaterMarkTool\xiaowanzi.jpg");
            Bitmap newbitmap = imageFile as Bitmap;
            Graphics g = Graphics.FromImage(newbitmap);
            Color pixel;
            int ret = 0;
            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);
                    ret = (pixel.R + pixel.G + pixel.B) / 3;
                    newbitmap.SetPixel(x, y, Color.FromArgb(ret, ret, ret));
                }
            }
            g.DrawImage(newbitmap, 0, 0);
            this.pictureBox2.Image = newbitmap;
            g.Dispose();

        }

 

  • 指针法

   通过LockBits方法来获取位图的首地址, 该方法简单,直接用指针进行位图操作。所以对内存的操作需要unsafe下进行操作。

   为了保持类型安全,在默认情况下,C#是不支持指针运算的,因为使用指针会带来相关的风险。所以C#只允许在特别标记的代码块中使用指针。通过使用unsafe关键字,可以定义可使用指针的不安全上下文。

  • 内存法

 该方法就是指图像数据直接复制到内存中,这样就使程序的运行速度大大提高。 

 

3. 转化为灰度方法

浮点算法:Gray=R*0.3+G*0.59+B*0.11

整数算法:Gray=(R*30+G*59+B*11)/100

移位算法:Gray=(R*28+G*151+B*77)>>8

平均值法:Gray=(R+G+B)/3

仅取绿色:Gray=G

灰度是指黑白图像中点的颜色深度,范围一般从0到255,白色为255,黑色为0,因此黑白图片也称为灰度图像。

 

 

 

 

 

      

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值