我有在图像中包含一个黑色圆圈的位图图像。我发现所有的图像是黑色的像素代表圆和保存点到列表中。
我在哪里输了就是找到圆的,从保存在列表中坐标的中心。我想,我需要以某种方式找到圆的直径,但是我怎么循环虽然像素要做到这一点,以确定?
一个幼稚的方法可能是找到了一圈边框。
看到你已经拥有的所有点的列表中,你可以找到的上,下,左,右。
假定(0,0)的坐标系的左上角:
边框的中心是圆的中心。类似地,边界框的宽度/高度是其直径。
发现在圈中的所有点的平均值。那么这会给你的圆心。
var aggregate = points.Aggregate((point, result) => new Point{ X = point.X + result.X, Y = point.Y + result.Y });
var center = new Point { X = aggregate.X / points.Count, Y = aggregate.Y / points.Count };
这可能是一个更优化的解决方案,因为它可能同时要为黑色像素扫描图像来完成。而不是寻找黑色像素,然后使用LINQ。
圈是相对而言的,当涉及到的图像,这是说,你指的是在像素显示和可能只是代表一个圆的形状。
然而得到的中点,所有你需要做的就是将范围。
假设你有一个List<Point>
var left = list.Min(x => x.X);
var right = list.Max(x => x.X);
var top= list.Min(x => x.Y);
var bottom = list.Max(x => x.Y);
Point mid = new Point();
mid.X = left + (right-left) / 2; //calculate mid point x
mid.Y = top + (bottom-top) / 2; //calculate mid point y
注:完全未经测试