首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在c#中将位图图像转换为黑白图像?

如何在c#中将位图图像转换为黑白图像?
EN

Stack Overflow用户
提问于 2011-01-12 21:30:59
回答 2查看 57.1K关注 0票数 11

可能重复:

convert image to Black-White or Sepia in c#

我正在编写一个C#应用程序,它打开一个图像,然后单击一个按钮,只显示黑白图像!我肯定会在网上找到很多信息,但我的搜索并没有给我提供很多可以理解和有用的信息。

我不知道该怎么做。有人有什么建议吗?知道网上的教程吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-01-12 21:36:53

我曾经找到一个将位图转换为灰度的函数

代码语言:javascript
复制
public void ToGrayScale(Bitmap Bmp)
{
    int rgb;
    Color c;

    for (int y = 0; y < Bmp.Height; y++)
    for (int x = 0; x < Bmp.Width; x++)
    {
        c = Bmp.GetPixel(x, y);
        rgb = (int)Math.Round(.299 * c.R + .587 * c.G + .114 * c.B);
        Bmp.SetPixel(x, y, Color.FromArgb(rgb, rgb, rgb));
    }
}

该函数接受位图作为参数,并将其更改为其灰度版本。

我希望这能帮到你。

票数 26
EN

Stack Overflow用户

发布于 2011-01-12 21:59:12

编辑在这里查看更完整的答案:convert image to Black-White or Sepia in c#

有许多方法可以降低彩色图像的饱和度。事实上,可能没有一种“正确”或“正确”的方法来做到这一点,尽管有些方法比其他方法更正确。

我假设你的图像是RGB (红-绿-蓝)格式(尽管BGR也很常见)。

最简单的方法,应该适用于大多数照片(但不太适用于合成图像)是只使用绿色通道的3个RGB通道。人类对光谱中绿色部分的变化最敏感,因此绿色通道覆盖了大部分可见范围,是您想要的灰度图像的良好近似值。

生成灰度图像的更好方法是使用3个RGB通道的加权平均值。选择等权重(0.33*R+0.33*G+0.33*B)将会得到一个非常好的灰度图像。其他权重会给出不同的结果,其中一些可能被认为更美观,而另一些可能会考虑到感知参数。

您可以始终将图像转换到只有一个灰度通道(和2个“颜色”通道)的另一个颜色空间,例如HSV (V是灰度)、YUV (Y是灰度)或Lab (L是灰度)。差异应该不会很大。

术语“去饱和度”来自HSV空间。如果您将图像转换为HSV,将S通道(饱和度)设置为全零,并渲染图像,您将获得一个3通道的去饱和“颜色”图像。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4669317

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档