EmguCV - 如何找到List <contour <point>&gt;坐标?</轮廓<点>

时间:2014-06-29 18:13:00

标签: list point emgucv contour area

我只想知道如何在轮廓点列表中提取一些元素。

基本上,我有这个:

List<Contour<Point>> contoursList = new List<Contour<Point>>;
contourList.Add(contours); //that contours variable is a Contour<Point> that i receive in a .FindContour method.

然后我需要选择/提取/列表中的任何一个特定元素并找到它的坐标。那我怎么能这样做呢?

并且请,任何想法。

2 个答案:

答案 0 :(得分:0)

你有没有提到this post

使用区域,轮廓长度和等级的属性过滤器每个轮廓的中心可过滤所需的轮廓坐标。

答案 1 :(得分:0)

这是你应该做的:

  1. 首先,创建一个Contour变量
  2. 在执行FindCountour()方法时枚举轮廓,将当前轮廓推送到您在1中声明的变量。
  3. 根据您的条件选择特定元素
  4. 请参阅下面的示例代码:

                    //variable to hold the contour
                    Contour<Point> contours = null;
    
                    for (var contour = binaryImage.FindContours(CHAIN_APPROX_METHOD.CV_CHAIN_APPROX_SIMPLE,
                    RETR_TYPE.CV_RETR_CCOMP, mem);
                    contour != null;
                    contour = contour.HNext)
                    {
                        if (contours == null)
                        {
                            //this is to ensure contours is not null
                            contours = contour;
                        }
    
                        //push/add the sequence of points to contours
                        contours.PushMulti(contour.ToArray(), BACK_OR_FRONT.BACK);
                    }
    
                    //do what you want with it
                    var ch = contours.GetConvexHull(ORIENTATION.CV_CLOCKWISE, mem);
    
                    //for example, convert these points to type PointF
                    PointF[] pointfs = Array.ConvertAll(contours.ToArray(), input => new PointF(input.X, input.Y));
    
                    //or detect the bounding rectangle
                    var roi = PointCollection.BoundingRectangle(pointfs);