【 KINECT 】Depth Camera からの画像ビット列を、のぞき見してみる。
KINECT を操作するにあたり、まずは Depth Camera( 深度カメラ )から送られるデーターがどの様なものかを見てみましょう。
とは言っても高速に数値がスクロールされるだけですが、これが元となり表示されるデーターを加工していくことになります。
Visual Studio で、KINECT プロジェクトを作成

プロジェクト作成のステップ
- 新しいプロジェクトを作成する。
- Microsoft.Kinect.dll を参照する。
- 適切な Kinect 名前空間を宣言する。
プログラム

Microsoft.Kinect 名前空間の宣言
アプリケーションの Program.cs ファイルの先頭に、Microsoft.Kinect 名前空間の宣言を追加する。
この名前空間は、NUI と オーディオ用のすべての Kinect 機能をカプセル化しています。

ランタイムのインスタンス作成と初期化
カメラのデーターを使用する場合は、さらに KinectSensor オブジェクトのインスタンスを作成、初期化した上で開始する必要があります。
ここでは、深度カメラのビットストリームを表示するアプリケーションを作成しますが、KinectSensors 配列にカメラが1台しかない場合を想定しています。
DepthFrameReady イベントのイベントハンドラを追加し、「Space」キーが押されるまでアプリケーションが終了せずに待機するループを作成します。
最後に、アプリケーションを終了する直前に深度ストリームリーダーを無効にします。
static void Main ( string[] args )
{
// センサーのインスタンスを作成する。
KinectSensor sensor = KinectSensor.KinectSensors[0];
//カメラを初期化する。
sensor.DepthStream.Enable();
sensor.DepthFrameReady += sensor_DepthFrameReady;
// マトリックスのように表示する。
Console.ForegroundColor = ConsoleColor.Green;
// データストリームを開始する。
sensor.Start();
while ( Console.ReadKey().Key != ConsoleKey.Spaceber ){}
}
|

深度カメラからのデータ読み取り関数
static void sensor_DepthFrameReady ( object sender, DepthImageFrameReadyEventArgs
e )
{
using ( var depthFrame = e.OpenDepthImageFrame ( ) )
{
if ( depthFrame == null )
return;
short[] bits = new short [ depthFrame.PixelDataLength ];
depthFrame.CopyPixelDataTo ( bits );
foreach ( var bit in bits )
Console.Write ( bit );
}
} |

今後の展開
上記アプリケーションは、KINECTを使用する基本となります。
上記から得られるデータ( DepthFrameReady イベントで渡されるデータ )を使って色々なサンプルを作成していきます。
これ以外の有用なイベントがあります。
- DepthFrameReady イベント( 今回使用のもの )
- ColorFrameReady イベント
- SkeletonFrameReady イベント

ソース

実行結果