手の平の状態は、Kinect for Windows SDK 2.0 では次のように定義されています。
Kinect for Windows SDK 2.0 の Kinect.h(抜粋) |
enum _HandState { HandState_Unknown= 0, HandState_NotTracked= 1, HandState_Open= 2, HandState_Closed= 3, HandState_Lasso= 4 }; enum _TrackingConfidence { TrackingConfidence_Low= 0, TrackingConfidence_High= 1 }; |
NtKinect では、 setSkeleton() を呼び出して骨格情報を取得したときに、 手の平の状態(パー、グー、チョキ)を取得することができます。
返り値の型 | メソッド名 | 説明 |
---|---|---|
pair<int,int> | handState(int id =0, bool isLeft = true) |
setSkeleton()関数を呼び出した後で呼び出して、手の状態を取得できる。 引数
|
kinect.setSkeleton()メソッドを呼び出してkinect.skeleton に骨格情報をセットします。 各人間の手の状態を取得するための handState()関数では、 第1引数に 「kinect.skeleton ベクタのindex」 を指定する仕様になっているので、 各人間の骨格情報にアクセスするのに制御変数 i を 用いたfor文でループしています。
左右の手の平の位置情報は kinect.skeleton[i ][JointType_HandLeft] および kinect.skeleton[i ][JointType_HandRight] にあります。各関節の位置を 制御変数 j でループして 赤い四角形で表示していますが、 j の値が JointType_HandLeft または JointType_HandRight の場合は 手の平の状態を表す大きめの四角形も表示しています。
main.cpp |
|
RGB画像の上に、認識された関節が赤い四角形で示されます。 手の平状態に応じて次の色で四角が書かれます。
手の平の状態 | 色 | cv::Scalarの引数 |
---|---|---|
Unknown | 青 | 255,0,0 |
追跡不可 | 緑 | 0,255,0 |
パー | シアン | 255,255,0 |
グー | マゼンタ | 255,0,255 |
チョキ | 黄色 | 0,255,255 |
上記のzipファイルには必ずしも最新の NtKinect.h が含まれていない場合があるので、 こちらから最新版をダウンロードして 差し替えてお使い下さい。