2017-01-08 4 views
0

Я работаю над проектом распознавания рук. На данный момент я могу обнаружить руку, и я нашел контур руки и выпуклых точек корпуса, используя следующий код:Самые дальние точки в выпуклой оболочке

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)); 

    } 

В выходе есть более чем одна точка на кончике каждого пальца. Я хочу, чтобы на каждом кончике пальца набиралась одна точка.

После того, как я сделал несколько исследований, я понял, что для получения одной точки на каждом кончике пальца мне нужно найти самую дальнюю точку из каждой вершины в выпуклой оболочке.

Как получить самые дальние точки в выпуклом корпусе?

ответ

0

Вы могли бы взглянуть на: http://geomalgorithms.com/a14-_extreme_pts.html

Он содержит пояснения и примеры кодовых, которые могут помочь вам.

+0

Если у вас есть ответ, который вы хотели бы добавить к этой ссылке, используйте раздел ответа. Чтобы только предоставлять ссылки, используйте раздел комментариев. Вы можете получить отрицательный результат для этого !!!! –

0

Использование convexity defects. Полагаю, это то, что вам нужно. Например, это должно помочь вам найти более точный центр руки, направления пальцев и другие вещи.