2012-03-15 17 views
4

プレイヤー(特にプレイヤー)が近い/遠いときに何かを起こさせようとしているグループプロジェクトをやっているので、この機能を書いています。なぜ、これが適切に一つの画素をつかんで、プレイヤーの深さをつかむしないデータKinect SDK C#からプレーヤーのDepthを取得するにはどうすればよいですか?

private void FindDepth(DepthImageFrame depthFrame) 
    { 

     short[] rawDepthData = new short[depthFrame.PixelDataLength]; 
     depthFrame.CopyPixelDataTo(rawDepthData); 

     Byte[] pixels = new byte[depthFrame.Height * depthFrame.Width * 4]; 

     for (int depthIndex = 0; depthIndex < rawDepthData.Length; depthIndex++) 
     { 
      int player = rawDepthData[depthIndex] & DepthImageFrame.PlayerIndexBitmask; 
      int depth = rawDepthData[depthIndex] >> DepthImageFrame.PlayerIndexBitmaskWidth; 

      if (player > 0) 
      { 
       playerDepth = rawDepthData[depthIndex]; 
      } 

     } 

    } 

(我々は、スケルトンの機能を使用することを許可されていませんか)?

答えて

3

深度ピクセルは16ビットで表されます。下位3ビットはプレーヤーインデックスを提供し、残りの13ビットは深度を提供する。 {深度ビット} {プレイヤインデックスビット}

{0100 1011 1001 0} {010}

従ってプレイヤーインデックス我々を見つけるためにAND DepthImageFrame.PlayerIndexBitmaskによって

(0100 1011 1001の下に表示されます001000)AND 0000 0000 0000 0111 = 0000 0000 0000 0010 = 2すなわち第2のプレーヤー

そして距離を見つけるために、以下に示すように13ビットを返す3ビットで右にシフトする。 0000 1001 0111 0010 = 2418 ie 2418mm

0

スケルトントラッキングがオンになっている場合、プレーヤー番号の値は深度イメージにのみ追加されることを覚えておくことが重要です。スケルトントラッキングがオフになっている場合、各深度のプレーヤーの番号 は0に設定されます。

関連する問題