天天看點

/LGC圖形渲染/彩色圖像轉換為灰階圖像

彩色圖像轉換為灰階圖像 作者: 網絡 日期: 2009-08-11 文本介紹了将彩色圖像轉換為灰階圖像的算法,并給出了代碼樣例。

簡介

數字圖像在計算機上以位圖(bitmap)的形式存在,位圖是一個矩形點陣,其中每 一點稱為像素(pixel),像素是數字圖像中的基本機關。一幅m×n大小的圖像,是 由m×n個明暗度不等的像素組成的。數字圖像中各個像素所具有的明暗程度由灰 度值(gray level)所辨別。一般将白色的灰階值定義為255,黑色灰階值定義為0, 而由黑到白之間的明暗度均勻地劃分為256個等級。對于黑白圖像,每個像素用 一個位元組資料來表示,而在彩色圖像中,每個像素需用三個位元組資料來表述。彩 色圖像可以分解成紅(R)、綠(G)、藍(B)三個單色圖像,任何一種顔色都可以由 這三種顔色混合構成。在圖像進行中,彩色圖像的處理通常是通過對其三個單色 圖像分别處理而得到的。

算法

如果要将彩色圖像轉換為灰階圖像,隻要将圖像中的每個像素取出來,然後取像 素的R、G、B顔色分量,利用如下公式計算灰階值:
int gray = r*0.3 + g*0.59 + b*0.11;



      

然後再令像素的R、G、B分度值都為gray就行了 。

也有的資料提出灰階轉換公式如下所示:

int gray = (r+g+b) / 3;



      
兩種方法轉換後的灰階圖檔效果差不多。

代碼樣例

public void GrayScale(Bitmap image )

{

    int width = image.Width - 1;

    int height = image.Height - 1;



    Color color;

    for (int i = width; i >= 0;i--)

    {

    for (int j = height; j >= 0;j--)

    {

        //讀取每一個像素

        color = image.GetPixel(i,j);        //計算灰階值

        int gray = (int)(color.R * 0.3 + color.G * 0.59 + color.B * 0.11);

        //int gray = (color.R + color.G + color.B) / 3;

        Color colorResult = Color.FromArgb(255,gray,gray,gray);

        //設定像素為灰階

        image.SetPixel(i, j, colorResult);

    }

    }

}

      
原始圖檔:
/LGC圖形渲染/彩色圖像轉換為灰階圖像
灰階圖檔:
/LGC圖形渲染/彩色圖像轉換為灰階圖像

SeeAlso

  • GDI+圖像處理初級系列—灰階圖像處理

繼續閱讀