我是EmguCV& C#和我有一个项目,可以从USB Camera找到圈子的信息(中心的X和Y坐标)。根据这些坐标,原型机通过步进电机x轴或y轴移动滚轮。
我将CircleF与HoughCircles一起使用,并找到了此代码的坐标:
CircleF [] circles = imgProcessed.HoughCircles(new Gray(100),new Gray(50),2,imgProcessed.Height / 4,30,45)[0];
我想从CircleF创建二维数组以应用数组处理并将数学运算应用于圆的X和Y值。
我认为如果我将“圆圈”CircleF转换为数组,这些过程会更容易。 我知道CircleF是一种数组,但我不能对它应用一些数组处理(如排序)。我想将圆圈中心的X值从小到大排序。我不能像Array.Sort(圆圈)
那样做有人帮我解决这个问题吗?
或者如果可以在CircleF上应用数组处理,我该如何申请?
代码示例很有用。谢谢你。
答案 0 :(得分:0)
你到底是什么意思"阵列过程"? CircleF基本上只是"包装"圆的中心坐标以及半径和面积。看看以下摘自Emgu.Cv.dll:
public struct CircleF : IEquatable<CircleF>
{
public CircleF(PointF center, float radius);
public double Area { get; }
public PointF Center { get; set; }
[XmlAttribute("Radius")]
public float Radius { get; set; }
public bool Equals(CircleF circle2);
}
因此,在迭代CircleF结构数组时,您可以:
for(int i=0;i < circles.Length;i++){
var currCircleF = circles[i];
//do something with currCircleF, e.g. change radius,center,etc.
}
答案 1 :(得分:0)
根据中心X的值对圆圈阵列进行排序:
var sortedCircleFbyX = circles.OrderBy(c => c.Center.X).ToArray();
结果是一个CircleF数组。然后,您可以执行以下处理:
//do more processing
foreach (var circleF in sortedCircleFbyX)
{
MoveStepperMotor(circleF.Center);
}