C#|RBG影象轉灰度影象與影象灰度反轉
阿新 • • 發佈:2019-02-19
我們將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;
}