我有一个黑白图像,我需要存储后面像素的位置,然后通过将其中一半随机变为白色来添加一些噪音。
任何人都可以告诉我如何存储只有黑色像素的位置,并随机将其中一半变为白色?
答案 0 :(得分:2)
您可以创建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个。
但请注意,GetPixel
和SetPixel
的效果并不理想。如果您的图片很大,请务必查看LockBits以获得更好的效果。