【问题标题】:What is the fastest way to convert an image to pure black and white in C#?在 C# 中将图像转换为纯黑白的最快方法是什么?
【发布时间】:2011-06-27 09:44:00
【问题描述】:

在有人因为我不检查其他帖子而抨击我之前,我已经这样做了。我有一个关于将图像转换为灰度的现有技术之一的具体问题。

我已经阅读了关于 SO 的其他帖子,并且基本上从this site 的教程中复制了技术 3(ColorMatrix)。它工作得非常、非常、迅速。

我遇到的问题是我需要的是纯 BW 图像。 (即:如果平均值(R,B,G)> 200 => 白色,否则为黑色)。我以直接的方式实现了它,它实际上比教程中的灰度算法花费了近 10 倍。

我不是图像处理专家,想知道是否有任何方法可以修改教程中的 sn-p 以将图像转换为纯黑白。如果没有,任何有效的方法都可以。

编辑:

这是我用于黑白的代码(无脑方法):

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;       

}

【问题讨论】:

  • 您实际上并不需要颜色矩阵来转换为 1 位(纯黑白)图像。尝试第二种解决方案,看看是否更快。 (如果没有,请发布您的代码。)
  • cal 你粘贴了一些性能很差的代码?如果你只添加一个“如果”的话,怎么能增加 10 倍的时间呢?

标签: c# .net image image-processing


【解决方案1】:

我正在使用这个简单的代码:

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;
}

【讨论】:

  • 我以为我们讨论的是最快的方法?
【解决方案2】:

这家伙做了三个测试,最快的是这里提到的ColorMatrixExternal link about image conversion

但其中一位评论者声称直接和unsafe 像素访问方法较慢的原因是在位图中调用.Width.Height 并将这些值复制到局部变量使得直接像素访问速度大大加快。

我对此进行了测试,似乎不安全的方法比使用ColorMatrix 快大约 2.5 倍。但可以说它也涉及更多,显然它要求在项目中允许unsafe 代码,这可能是不可取的。

【讨论】:

  • 请不要只包含外部文章的链接而不在此处添加任何示例。现在链接已经失效,没有办法知道如何实现它。
【解决方案3】:

【讨论】:

  • 应该更仔细地搜索...问题已解决,工作速度非常快。
  • 我“作弊”了一点...看到您链接中的禁食示例使用了 SetColorMatrix 并在 Google 上搜索了 SetColorMatrix BW :-)
猜你喜欢
  • 2017-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-29
相关资源
最近更新 更多