如何使用emgu c将circleF对象转换为数组对象#

时间:2014-08-01 14:32:25

标签: c# arrays sorting opencv emgucv

我是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上应用数组处理,我该如何申请?

代码示例很有用。谢谢你。

2 个答案:

答案 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);
}