1. 程式人生 > >C#|RBG影象轉灰度影象與影象灰度反轉

C#|RBG影象轉灰度影象與影象灰度反轉

我們將RBG影象轉灰度影象的方法寫成一個函式的形式,輸入為Bitmap格式的影象和影象的長和寬,輸出為byte型的陣列。

根據YUV的顏色空間中,Y的分量的物理意義是點的亮點,由該值反映亮點等級,根據RBG和YUV顏色控制元件的變換關係可建立亮度Y與R、G、B三個顏色分量的對應:

Y=0.3*R+0.59*G+0.11*B

以這個亮度值表達影象的灰度值。

RBG影象轉灰度影象具體函式如下:

 public byte[] GetPixelPic(Bitmap Pic, int Width, int Height)
        {
            Color pixel;
            byte
[] Arr = new byte[Width * Height]; //顯示灰度用 Bitmap newbitmap = new Bitmap(Width, Height); for (int y = 0; y < Height; y++) for (int x = 0; x < Width; x++) { if (x >= Pic.Width || y >= Pic.Height) { Arr[x + y * Pic.Width] = 0
; } else { pixel = Pic.GetPixel(x, y); //對應公式 float temp = (float)(pixel.R * 30 + pixel.G * 59 + pixel.B * 11 + 50) / 100; Arr[x + y * Pic.Width] = (byte
)temp; } } return Arr; }

此時白色的畫素點值為最大(255),黑色的畫素點值最小(0)。但有時候為了方便計算,我們需要對影象進行灰度反轉,即把每個畫素點的R、G、B三個分量的值0的設為255,255的設為0。

我們將影象灰度反轉也寫成一個函式的形式,輸入為Bitmap格式的影象,輸出也為Bitmap格式的影象。

影象灰度反轉具體函式如下:

public Bitmap GrayReverse(Bitmap pic)
      {
          for (int i = 0; i < pic.Width; i++)
      {    

              for (int j = 0; j < pic.Height; j++)
              {
                  //獲取該點的畫素的RGB的顏色
                  Color color = pic.GetPixel(i, j);
                 //灰度反轉
                  Color newColor = Color.FromArgb(255 - color.R, 255 - color.G, 255 - color.B);
                  pic.SetPixel(i, j, newColor);
              }
          }
          return pic;
      }