Обнаружение открытого и близкого кулака - PullRequest
3 голосов
/ 26 января 2011

Я пытался следовать алгоритму, но он не работает. Я не могу понять, в чем проблема. Кто-нибудь может мне помочь?

Где я могу узнать / найти примеры распознавания жестов, передаваемых с Kinect с использованием OpenCV?

Image<Gray, Byte> dest = new Image<Gray, Byte>(this.bitmap.Width, this.bitmap.Height);

CvInvoke.cvThreshold(src, dest, 220, 300, Emgu.CV.CvEnum.THRESH.CV_THRESH_BINARY);
Bitmap nem1 = new Bitmap(dest.Bitmap);
this.bitmap = nem1;

Graphics g = Graphics.FromImage(this.bitmap);

using (MemStorage storage = new MemStorage()) //allocate storage for contour approximation
{
    for (Contour<Point> contours = dest.FindContours(); 
        contours != null; 
        contours = contours.HNext)
    {
        g.DrawRectangle(new Pen(new SolidBrush(Color.Green)),contours.BoundingRectangle);

        IntPtr seq = CvInvoke.cvConvexHull2(contours,storage.Ptr, Emgu.CV.CvEnum.ORIENTATION.CV_CLOCKWISE, 0);
        IntPtr defects = CvInvoke.cvConvexityDefects(contours, seq, storage);
        Seq<Point> tr= contours.GetConvexHull(Emgu.CV.CvEnum.ORIENTATION.CV_CLOCKWISE);

        Seq<Emgu.CV.Structure.MCvConvexityDefect> te = contours.GetConvexityDefacts(storage, Emgu.CV.CvEnum.ORIENTATION.CV_CLOCKWISE);
        g.DrawRectangle(new Pen(new SolidBrush(Color.Green)), tr.BoundingRectangle);
    }
}

1 Ответ

0 голосов
/ 21 июля 2011

Без некоторых графических данных трудно помочь (у меня тоже нет подходящего оборудования). Во всяком случае, я предлагаю вам две вещи:

  • , поскольку это графическая процедура, отлаживать все, сохраняя или показывая любой промежуточный шаг (порог, контуры, выпуклая оболочка)
  • перейти на более простой подход. Например:
    1. применить порог (в результате карта ваших рук 0/1)
    2. для каждой строки, число переходов 0/1
    3. проверить максимальное количество переходов: то есть, если оно выше 7, руки открыты

Дайте мне знать, если это работает: -)

...