簡體   English   中英

在C#中將圖像轉換為純黑白的最快方法是什么?

[英]What is the fastest way to convert an image to pure black and white in C#?

在有人因不檢查其他職位而開除我之前,我已經做到了。 我有一個關於將圖像轉換為灰度的技術之一的特定問題。

我已經閱讀了SO上的其他文章,並且基本上從該站點的教程復制了技術3(ColorMatrix)。 它非常非常快地運作。

我遇到的問題是我需要的是純BW圖像。 (即:如果average(R,B,G)> 200 =>白色,則為黑色)。 我已經實現了簡單明了的方法,實際上它花費的時間幾乎是本教程中灰度算法的10倍。

我不是圖像處理專家,並且想知道是否有任何方法可以修改本教程中的代碼片段,以將圖像轉換為純黑白圖像。 如果沒有,任何有效的方法都可以。

編輯:

這是我用於黑白(無腦方法)的代碼:

public Bitmap make_bw(Bitmap original) {

    Bitmap output = new Bitmap(original.Width, original.Height);

    for (int i = 0; i < original.Width; i++) {

        for (int j = 0; j < original.Height; j++) {

            Color c = original.GetPixel(i, j);

            int average = ((c.R + c.B + c.G) / 3);

            if (average < 200)
                output.SetPixel(i, j, Color.Black);

            else
                output.SetPixel(i, j, Color.White);

        }
    }

    return output;       

}

讀這個,同樣的問題: 什么是好的TRUE黑白彩色矩陣?

這個人進行了三個測試,最快的是這里提到的ColorMatrix 有關圖像轉換的外部鏈接

但是其中一位評論者聲稱,直接和unsafe像素訪問方法較慢的原因是調用了位圖中的.Width.Height ,並將這些值復制到局部變量后,直接訪問像素的速度大大提高了。

我對此進行了測試,看來不安全的方法比使用ColorMatrix快約2.5倍。 但是可以說它也涉及更多,並且顯然它要求在項目中允許使用unsafe代碼,這可能是不希望的。

我正在使用以下簡單代碼:

public Bitmap GrayScaleFilter(Bitmap image)
{
    Bitmap grayScale = new Bitmap(image.Width, image.Height);

    for (Int32 y = 0; y < grayScale.Height; y++)
        for (Int32 x = 0; x < grayScale.Width; x++)
        {
            Color c = image.GetPixel(x, y);

            Int32 gs = (Int32)(c.R * 0.3 + c.G * 0.59 + c.B * 0.11);

            grayScale.SetPixel(x, y, Color.FromArgb(gs, gs, gs));
        }
    return grayScale;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM