【问题标题】:Farthest points in convex hull凸包中的最远点
【发布时间】:2017-05-22 21:00:34
【问题描述】:

我正在做一个手部识别项目。此时我能够检测到手,并使用以下代码找到手的轮廓和凸包点:

Contour<Point> contours = imageThreshold.FindContours(Emgu.CV.CvEnum.CHAIN_APPROX_METHOD.CV_CHAIN_APPROX_SIMPLE,
   Emgu.CV.CvEnum.RETR_TYPE.CV_RETR_LIST, storage);
   Contour<Point> largestcontour = contours;
   while (contours != null)
   {
      if(largestcontour.Area < contours.Area)
      {
         largestcontour = contours;
      }

      contours = contours.HNext;
   }
   if (largestcontour != null)
   {
      Seq<Point> convexHull = largestcontour.GetConvexHull(Emgu.CV.CvEnum.ORIENTATION.CV_CLOCKWISE);
      foreach (var hullPoint in convexHull)
      {
         CvInvoke.cvCircle(ColorFrame, hullPoint, 3, new MCvScalar(255), 2, Emgu.CV.CvEnum.LINE_TYPE.EIGHT_CONNECTED, 0);
      }

      CvInvoke.cvDrawContours(ColorFrame, convexHull, new MCvScalar(255),
                        new MCvScalar(128), 1, 1, Emgu.CV.CvEnum.LINE_TYPE.EIGHT_CONNECTED, new Point(0, 0));

   }

在输出中,每个指尖上都有多个点。我想要的是在每个指尖上得到一个点。

在做了一些研究之后,我的理解是,要在每个指尖上得到一个点,我需要找到距凸包中每个顶点最远的点。

如何在凸包中获得最远的点?

【问题讨论】:

    标签: c# opencv image-processing computer-vision emgucv


    【解决方案1】:

    你可以看看: http://geomalgorithms.com/a14-_extreme_pts.html

    它包含可能对您有所帮助的解释和代码示例。

    【讨论】:

    • 如果您有想要添加到此链接的答案,请使用答案部分。为了只提供链接,请使用 cmets 部分。你最终可能会得到一个负分!!!!
    【解决方案2】:

    使用convexity defects。我想这是你需要的。例如,它应该可以帮助您找到更准确的手心、手指方向和其他内容。

    【讨论】:

      猜你喜欢
      • 2017-02-24
      • 1970-01-01
      • 2013-10-09
      • 2011-01-08
      • 1970-01-01
      • 1970-01-01
      • 2011-03-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多