a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > C# > 正文

基于c#圖像灰度化、灰度反轉、二值化的實現方法詳解

2020-01-24 03:17:56
字體:
來源:轉載
供稿:網友
圖像灰度化:
將彩色圖像轉化成為灰度圖像的過程成為圖像的灰度化處理。彩色圖像中的每個像素的顏色有R、G、B三個分量決定,而每個分量有255中值可取,這樣一個像素點可以有1600多萬(255*255*255)的顏色的變化范圍。而灰度圖像是R、G、B三個分量相同的一種特殊的彩色圖像,其一個像素點的變化范圍為255種,所以在數字圖像處理種一般先將各種格式的圖像轉變成灰度圖像以使后續的圖像的計算量變得少一些。灰度圖像的描述與彩色圖像一樣仍然反映了整幅圖像的整體和局部的色度和亮度等級的分布和特征。圖像的灰度化處理可用兩種方法來實現。
第一種方法使求出每個像素點的R、G、B三個分量的平均值,然后將這個平均值賦予給這個像素的三個分量。
第二種方法是根據YUV的顏色空間中,Y的分量的物理意義是點的亮度,由該值反映亮度等級,根據RGB和YUV顏色空間的變化關系可建立亮度Y與R、G、B三個顏色分量的對應:Y=0.3R+0.59G+0.11B,以這個亮度值表達圖像的灰度值。
復制代碼 代碼如下:

/// <summary>
      /// 圖像灰度化
      /// </summary>
      /// <param name="bmp"></param>
      /// <returns></returns>
      public static Bitmap ToGray(Bitmap bmp)
      {
          for (int i = 0; i < bmp.Width; i++)
          {
              for (int j = 0; j < bmp.Height; j++)
              {
                  //獲取該點的像素的RGB的顏色
                  Color color = bmp.GetPixel(i, j);
                  //利用公式計算灰度值
                  int gray = (int)(color.R * 0.3 + color.G * 0.59 + color.B * 0.11);
                  Color newColor = Color.FromArgb(gray, gray, gray);
                  bmp.SetPixel(i, j, newColor);
              }
          }
          return bmp;
      }

灰度反轉:
把每個像素點的R、G、B三個分量的值0的設為255,255的設為0。
復制代碼 代碼如下:

/// <summary>
      /// 圖像灰度反轉
      /// </summary>
      /// <param name="bmp"></param>
      /// <returns></returns>
      public static Bitmap GrayReverse(Bitmap bmp)
      {
          for (int i = 0; i < bmp.Width; i++)
          {
              for (int j = 0; j < bmp.Height; j++)
              {
                  //獲取該點的像素的RGB的顏色
                  Color color = bmp.GetPixel(i, j);
                  Color newColor = Color.FromArgb(255 - color.R, 255 - color.G, 255 - color.B);
                  bmp.SetPixel(i, j, newColor);
              }
          }
          return bmp;
      }

灰度圖像二值化:
在進行了灰度化處理之后,圖像中的每個象素只有一個值,那就是象素的灰度值。它的大小決定了象素的亮暗程度。為了更加便利的開展下面的圖像處理操作,還需要對已經得到的灰度圖像做一個二值化處理。圖像的二值化就是把圖像中的象素根據一定的標準分化成兩種顏色。在系統中是根據象素的灰度值處理成黑白兩種顏色。和灰度化相似的,圖像的二值化也有很多成熟的算法。它可以采用自適應閥值法,也可以采用給定閥值法。
復制代碼 代碼如下:

  /// <summary>
        /// 圖像二值化1:取圖片的平均灰度作為閾值,低于該值的全都為0,高于該值的全都為255
        /// </summary>
        /// <param name="bmp"></param>
        /// <returns></returns>
        public static Bitmap ConvertTo1Bpp1(Bitmap bmp)
        {
            int average = 0;
            for (int i = 0; i < bmp.Width; i++)
            {
                for (int j = 0; j < bmp.Height; j++)
                {
                    Color color = bmp.GetPixel(i, j);
                    average += color.B;                    
                }
            }
            average = (int)average / (bmp.Width * bmp.Height);

            for (int i = 0; i < bmp.Width; i++)
            {
                for (int j = 0; j < bmp.Height; j++)
                {
                    //獲取該點的像素的RGB的顏色
                    Color color = bmp.GetPixel(i, j);
                    int value = 255 - color.B;
                    Color newColor = value > average ? Color.FromArgb(0, 0, 0): Color.FromArgb(255,

255, 255);                   
                    bmp.SetPixel(i, j, newColor);
                }
            }
            return bmp;
        }

        /// <summary>
        /// 圖像二值化2
        /// </summary>
        /// <param name="img"></param>
        /// <returns></returns>
        public static Bitmap ConvertTo1Bpp2(Bitmap img)
        {
            int w = img.Width;
            int h = img.Height;
            Bitmap bmp = new Bitmap(w, h, PixelFormat.Format1bppIndexed);
            BitmapData data = bmp.LockBits(new Rectangle(0, 0, w, h), ImageLockMode.ReadWrite,

PixelFormat.Format1bppIndexed);
            for (int y = 0; y < h; y++)
            {
                byte[] scan = new byte[(w + 7) / 8];
                for (int x = 0; x < w; x++)
                {
                    Color c = img.GetPixel(x, y);
                    if (c.GetBrightness() >= 0.5) scan[x / 8] |= (byte)(0x80 >> (x % 8));
                }
                Marshal.Copy(scan, 0, (IntPtr)((int)data.Scan0 + data.Stride * y), scan.Length);
            }
            return bmp;
        }

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 99色综合 | 日韩成人午夜电影 | 亚洲成av人片一区二区梦乃 | 欧美一级爆毛片 | 日韩国产在线观看 | 免费一区 | av影片在线| 国产精品欧美久久久久一区二区 | 色屁屁草草影院ccyycom | 欧美三区| av超碰在线| 亚洲狠狠爱一区二区三区 | 久久美女 | 久久国产欧美日韩精品 | 麻豆国产一区二区三区四区 | 欧美福利一区二区三区 | 九九热这里只有 | 91网站在线播放 | 九九热视频精品在线 | 国产精品美女视频 | 久久a v视频 | 欧美日韩中字 | 国产视频久久久久 | julia一区二区中文久久94 | 久久精品免费视频观看 | 国产精品自产av一区二区三区 | 欧美综合一区 | 亚洲一区二区三区四区在线观看 | 巨大荫蒂视频欧美大片 | 一区二区高清 | 99精品久久精品一区二区爱城 | 综合色婷婷一区二区亚洲欧美国产 | 久久久久中文字幕 | 欧美天堂在线 | 亚洲乱码一区二区三区在线观看 | 伊人激情综合 | 九九久久久 | 男女www视频| 国产在线一区二区三区视频 | 国产精品免费一区二区三区都可以 | 国产在线观看高清 |