【问题标题】:How can I add noise to my black and white bitmap image?如何为我的黑白位图图像添加噪点?
【发布时间】:2014-02-13 22:07:04
【问题描述】:

我有一张黑白图像,我需要存储背面像素的位置,然后通过将其中一半随机变为白色来添加一些噪点。
谁能告诉我如何仅存储黑色像素的位置并随机将其中一半变为白色?

【问题讨论】:

  • 问题到底是什么?你哪部分有问题?要具体。

标签: c# image bitmap


【解决方案1】:

您可以创建一个List<Point> 来存储您的黑色像素。然后只需遍历它并随机更改它们:

List<Point> blackPixels = new List<Point>();

现在在上面的循环中:

else if (color.ToArgb() == Color.Black.ToArgb())
{
        blackColor++;
        blackPixels.Add(new Point(x,y));
}

当你想添加噪音时,只需执行以下操作:

Random r = new Random();

foreach(Point p in blackPixels) 
{
    if(r.NextDouble() < 0.5) 
    {
        bmp.SetPixel(p.X,p.Y,Color.White);
    }
}

统计会将大约一半的黑色像素设置为白色,但可能或多或少。如果你真的想要完全一半,那么你可以随机选择一组从 0 到 n 的 n/2 个随机数,不重复,并在blackPixels 中的这些索引处切换像素。或者您甚至可以随机排列 blackPixels 列表,然后更改其中的前 n/2 个。

但是请注意,GetPixelSetPixel 的性能不是很好。如果您的图片很大,请务必查看LockBits 以获得更好的性能。

【讨论】:

  • Matt Burland,我刚试过你的代码,它实际上并没有添加任何噪音,只是再次打印图像......
  • 你能告诉我如何打印我的新 bmp 图像吗?
  • @user3266873:我的错误,应该是NextDouble 而不是NextNext 返回一个 int,因此它不太可能小于
猜你喜欢
  • 2012-07-08
  • 1970-01-01
  • 2015-11-07
  • 1970-01-01
  • 2014-08-09
  • 1970-01-01
  • 2014-12-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多