我想将不同的形状从一个位图拆分成单独的位图。
我有一个可以对颜色进行分类的工作系统。
所以我有一个带有一种颜色的各种形状的位图列表。
我有一个要求:我不想使用任何形状检测liberary。
目前我只有一个简单的循环,它循环通过位图中的所有像素,并检查是否有颜色可以推断出像素可能是旧形状或新形状的一部分。
变量列表
layeredColorSystem =位图
这是颜色分选系统的结果。
foreach (Color colorLayer in layeredColorSystem.Keys)
{
Bitmap layer = layeredColorSystem[colorLayer];
Bitmap shape = new Bitmap(input.Width, input.Height);
for (int x = 0; x < layer.Width; x++)
{
for (int y = 0; y < layer.Height; y++)
{
Color currentPixel = layer.GetPixel(x, y);
if (!currentPixel.Equals(colorLayer))
{
//no color here maybe a new shape can come up
} else
{
//color here maybe a part of an old shape maby a new shape.
}
}
}
}
所以我的问题是:我如何编写一个检测形状的简单代码,并将每个单独的形状放在位图中与原始位图大小相同的位图?
提前致谢!
答案 0 :(得分:2)
实施flood-fill算法以查找特定色块内的所有像素。然后,将该信息复制到另一个位图中。将像素“移动”到其他位图后,请跟踪已移动的像素,以便不重新处理相同的像素。
如果你想确定实际的形状(例如它是一个三角形?圆形等等),你需要提出规则,但基本上,你需要从图像中提取每个“对象”才能成为能够处理它。
其他机制可能包括边缘检测,但看起来您正在使用颜色变化作为“边缘”,这是一种方法。