私は現在、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 つの点のセット、または単一の点と長さを期待していましたが、そうではないようです。 . これで「レンガの壁」にぶつかったら、別の投稿をします)