C# 如何向黑白位图图像添加噪波?
我有一个黑白图像,我需要存储后面像素的位置,然后通过随机将它们的一半变成白色来添加一些噪声。C# 如何向黑白位图图像添加噪波?,c#,image,bitmap,C#,Image,Bitmap,我有一个黑白图像,我需要存储后面像素的位置,然后通过随机将它们的一半变成白色来添加一些噪声。 有谁能告诉我如何只存储黑色像素的位置,并将其中的一半随机变成白色?您可以创建一个列表来存储黑色像素。然后迭代并随机更改它们: List<Point> blackPixels = new List<Point>(); 当你想添加噪音时,只需执行以下操作: Random r = new Random(); foreach(Point p in blackPixels) {
有谁能告诉我如何只存储黑色像素的位置,并将其中的一半随机变成白色?您可以创建一个
列表来存储黑色像素。然后迭代并随机更改它们:
List<Point> blackPixels = new List<Point>();
当你想添加噪音时,只需执行以下操作:
Random r = new Random();
foreach(Point p in blackPixels)
{
if(r.NextDouble() < 0.5)
{
bmp.SetPixel(p.X,p.Y,Color.White);
}
}
Random r=new Random();
foreach(点p,黑色像素)
{
if(r.NextDouble()<0.5)
{
bmp.SetPixel(p.X,p.Y,Color.White);
}
}
从统计上来说,这会将大约一半的黑色像素设置为白色,但它可能或多或少。如果您真的想要正好一半,那么您可以在0到n之间随机选取一组n/2随机数,而不重复,并在blackPixels
中切换这些索引处的像素。或者你甚至可以洗牌你的黑像素列表
,然后改变前n/2个
但是,请注意,GetPixel
和SetPixel
的性能不是很好。如果您的图像较大,请务必查看是否有更好的性能。问题到底是什么?你哪部分有问题?具体点。马特·伯兰,我刚刚试过你的代码,实际上它没有添加任何噪音,只是再次打印图像……你能告诉我如何打印新的bmp图像吗?@user3266873:我的错误应该是NextDouble
而不是Next
Next
返回一个int,因此它不太可能小于<0.5!
Random r = new Random();
foreach(Point p in blackPixels)
{
if(r.NextDouble() < 0.5)
{
bmp.SetPixel(p.X,p.Y,Color.White);
}
}