查找像素列表的圆心坐标坐标C#

问题描述 投票:3回答:2

我有在图像中包含一个黑色圆圈的位图图像。我发现所有的图像是黑色的像素代表圆和保存点到列表中。

我在哪里输了就是找到圆的,从保存在列表中坐标的中心。我想,我需要以某种方式找到圆的直径,但是我怎么循环虽然像素要做到这一点,以确定?

c# bitmap pixel
2个回答
1
投票

一个幼稚的方法可能是找到了一圈边框。

看到你已经拥有的所有点的列表中,你可以找到的上,下,左,右。

假定(0,0)的坐标系的左上角:

  • 顶部与分Y的点
  • 底部是最大Y.点
  • 左侧是与最小X的点
  • 右边是与最大十点

边框的中心是圆的中心。类似地,边界框的宽度/高度是其直径。

Edit: an alternative solution

发现在圈中的所有点的平均值。那么这会给你的圆心。

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。


1
投票

圈是相对而言的,当涉及到的图像,这是说,你指的是在像素显示和可能只是代表一个圆的形状。

然而得到的中点,所有你需要做的就是将范围。

假设你有一个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

注:完全未经测试

© www.soinside.com 2019 - 2024. All rights reserved.