3

アルゴリズムに従ってみましたが、うまくいきません。何が問題なのかわかりません。誰か助けてくれませんか?

OpenCV を使用して、Kinect からストリーミングされたジェスチャ認識の例はどこで確認できますか?

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

1 に答える 1

0

いくつかのグラフィックデータがなければ、助けるのは難しいです(私も適切なハードウェアがありません)。とにかく、私はあなたに2つのことを提案します:

  • これはグラフィカルな手順であるため、中間ステップ(しきい値、輪郭、凸包)を保存または表示するすべてをデバッグします。
  • より単純なアプローチに変更します。例えば:
    1. しきい値を適用します(結果としてあなたの手の0/1マップになります)
    2. 各行について、0/1遷移をカウントします
    3. トランジションの最大数をテストします。つまり、7を超える場合は、手を開いています。

それが機能するかどうか教えてください:-)

于 2011-07-21T09:48:39.310 に答える