2

私はOPENNIとNITEを使用しています。PrimeSenseが提供するStickFigureサンプルから3種類の情報を取得しようとしています。

  1. 各関節のX、Y、Z座標-これを行うことができます。左手の例、次の関数は、x、y、z座標をBXN_SKEL_LEFT_HANDオブジェクトg_UserGenerator.GetSkeletonCap()。GetSkeletonJointPosition(user、XN_SKEL_LEFT _HAND) ;

今、私は次の2つの助けが必要です::

  1. 同じのRGB値を取得するにはどうすればよいですか?

  2. スティックフィギュアの境界に関連付けられたデータを取得するにはどうすればよいですか?境界を意味する場合、ブロブデータ、またはスティックフィギュアが認識されている人間の肉/輪郭部分に関連付けられたデータを意味しますか?

任意の提案や解決策は高く評価されています。

ありがとうございました

4

2 に答える 2

0
  1. RGB 値は、カメラの画像データから取得されます。
    これは単純に RGB 値の 640x480 配列です。
    したがって、300,200 の RGB 値を取得するには、[300,200] のカメラ画像から値を読み取るだけです。
  2. 残念ながら、ブロブ データは点群の領域にあるため、カメラと OpenNI にはこのデータを見つけるための関数は含まれていません。
    ここで役立つ点群ライブラリを見ることをお勧めします。
    ( http://pointclouds.org/ )
    楽しんでください。
于 2011-07-25T02:10:20.723 に答える
0
  1. xnConvertRealWorldToProjective (depthGenerator.ConvertRealWorldToProjective と C++ ラッパー) は、ワールド空間のポイント (スケルトンから取得したものなど) を深度マップの 2D ピクセル座標に変換します。depthGenerator.GetAlternativeViewpointCap().SetAlternativeViewpoint(imageGenerator) の行に沿って何かを実行して、深度登録を有効にします。

    これにより、深度が RGB CMOS の位置からキャプチャされたかのように表示されるように変更され (たとえば、深度と RGB ピクセルが正確に整列します)、一方の座標を他方の座標で使用できます (解像度の違いによる x、y のスケーリングを除く)。 .

  2. ユーザー ジェネレーター ノードには GetUserPixels という関数 (users.GetUserPixels(0, sceneMD) など) があり、シーン メタデータ オブジェクトをラベル マップ (すべてのピクセルが所有するユーザーの識別子である 16 bpp ピクセル マップ) で埋めます。ピクセル、またはピクセルがユーザーに属していない場合は 0。

    これの使用例は、NiUserTracker ソース (背景とは異なる方法でユーザーに色を付ける方法) で入手できます。OpenNI\Samples\NiUserTracker のソースを参照してください (SceneDrawer.cpp は興味深いものです)。

于 2012-03-03T20:30:01.797 に答える