3

私は現在、OpenCV 2.3 と c++ を使用して手 (緑色の手袋を着用) を検出し、さまざまな手のジェスチャーを区別しようとしています。

まさにこの瞬間、私の次のステップは、手の特定の特徴 (凸欠陥) を取得することです。

これまでのところ、プロセスでこれらの関数を使用しました。

mixChannels(); //to subtract non-green channels from green. 
threshold(); //to convert to binary
erode(); dialate(); //to get rid of any excess noise
findContours(); //to find contours of course

これらは見事に機能findContours()し、を使用して出力することができましたdrawContours()

次のステップは、これが私がいる場所でconvexHull()、OpenCV 2.3 でも動作する を使用することです。convexHull()ただし、ベクトルの結果が実際にどのように見えるか (どの機能が含まれているか)はまだわかりません。

しかし、これがトリッキーな部分です。

古いバージョンの OpenCV ( を使用する c を使用) には、凸包に一連の欠陥を与えることができるIplImage、きちんとした小さな関数が呼び出されることがわかりました。cvConvexityDefects()これらは私が必要としているものですが、OpenCV 2.3 にはそのような関数がないようで、古い構文を使用してこれらの結果を取得する方法がわかりません。

上のOpen CV ドキュメントへのリンクをcvConvextDefects次に示します。

私が求めているのは、同様の OpenCV 2.3 関数、またはこれらの欠陥を見つけるための自己記述のコードまたはアルゴリズムです。または、ベクトルの結果などに古い 2.1 構文を使用する方法。

(他の特徴、長方形の境界ボックス、近似円を使用できることはわかっています。しかし、凸状の欠陥が最も特徴的な特徴を生み出すと確信しています。)

解決策 -この投稿のC++ ラッパーを使用する ことになりました。

次のステップは、これらの欠陥から使用可能なデータを取得することです。(一見すると、データは凸包または輪郭上の単一の点、またはこれらの数のように見えます。最初は、2 つの点のセット、または単一の点と長さを期待していましたが、そうではないようです。 . これで「レンガの壁」にぶつかったら、別の投稿をします)

4

2 に答える 2

3

新しい C++ インターフェイスは、(まだ) C のすべての関数をサポートしているわけではありません。また、その逆も当てはまります (cpp のすべてが c にあるわけではありません)。理由は様々ですが、使いたい機能が手軽に使えるのが良いところです。例として、ここでは輪郭をシーケンス (CvSeq) に変換し、それらを関数に送信する必要があります。

さらに、FindContours メソッドは cvFindContours のラッパーです。あなたはそれを呼び出すことができます

cvFindContours((IplImage*)matImage, ...);

結果を直接使用します。

もう 1 つの方法は、cvConvexDefects() に対して適切でクリーンな C++ ラッパーを作成し、それを OpenCV に送信することです。findContours ソースでは、そのためのヘルプが見つかります (逆の変換)

于 2011-11-16T12:08:40.957 に答える
2

凸包ベクトルをc++構文からあなたが言及したシーケンスに変換しようと思いますが、どこから始めればよいのかわかりません。おそらくこれに光を当てることができますか?

ここでこの質問をチェックしてください、私はそれがそれに入ると信じています。

凸性の欠陥C++OpenCv

于 2011-11-17T18:21:45.420 に答える