【问题标题】:Converting from VectorOfPoint to VectorOfPointF for contours in Emgu在 Emgu 中为轮廓从 VectorOfPoint 转换为 VectorOfPointF
【发布时间】:2016-12-21 21:46:17
【问题描述】:

我正在尝试使用 emgu 3.1 找到轮廓的凸包

FindContours 似乎只接受vectorOfVectorOfPoints(而不是pointsF)。但是,凸包需要一个vectorOfPointF。我错了吗?如果我将轮廓更改为 VectorOfVectorOfPointF,我会在调用 FindContours 时遇到运行时错误。

如何将 VectorOfPoint 转换为 VectorOfPointF? 有没有更好的方法?

谢谢!

using (var contours = new VectorOfVectorOfPoint())
using (Mat hierachy = new Mat())
{

    CvInvoke.FindContours(img, contours, hierachy, Emgu.CV.CvEnum.RetrType.External, Emgu.CV.CvEnum.ChainApproxMethod.ChainApproxSimple, new Point());
            for (int i = 0; i < contours.Size; i++)
            {
                var contour = contours[i];
                var c = new VectorOfPointF();
                CvInvoke.ConvexHull(contour, c, false, true);
            }

【问题讨论】:

    标签: c# emgucv


    【解决方案1】:

    似乎唯一的方法是从轮廓对象中的每个 VectorOfPoint 构造您的 VectorOfPointF:

    for (int i = 0; i < contours.Size; i++)
    {
        var contour = contours[i];
        var vf = new PointF[vp.Size];
        for (int ii = 0; ii < contour.Size; ii++) vf[i] = new PointF(contour[ii].X, contour[ii].Y);
        VectorOfPointF vvf = new VectorOfPointF(vf);
        var c = new VectorOfPointF();
        CvInvoke.ConvexHull(vvf, c, false, true);
    }
    

    【讨论】:

      【解决方案2】:

      @Atresmo 答案的略微更新版本。我们可以将 Point 转换为 PointF:

      for (int i = 0; i < contours.Size; i++)
      {
          var contour = contours[i];
          var vf = new PointF[contour.Size];
          for (int ii = 0; ii < contour.Size; ii++) vf[i] = contour[ii];
          VectorOfPointF vvf = new VectorOfPointF(vf);
          var c = new VectorOfPointF();
          CvInvoke.ConvexHull(vvf, c, false, true);
      }
      

      【讨论】:

        猜你喜欢
        • 2021-09-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-08
        • 2013-03-23
        • 2015-03-11
        • 2021-05-15
        相关资源
        最近更新 更多