人物を切り抜いて画面に表示するKinectサンプル
今回のサンプルは、人物の座標のみRGBデータを取得することで、その人物を画面上に切り抜いて表示するサンプルを作成します。
サンプルを実行すると、画面上にはプレイヤー(人物)だけが表示されます。背景は透明化されているため、あらかじめ背景画像を用意しておけば、合成することも可能です。まずは切り抜いたところまでの動画を御覧ください。
動画を見ていただくとわかりますが、頭部のあたりの切り抜きがギザギザになっています。現状のSDK 1.5ではこれが限界のようです。
サンプル一式は、会員限定特典としてダウンロードできます。記事末尾をご確認ください。
プロジェクトの作成
VS 2010のメニューから[ファイル(F)/新規作成(N)/プロジェクト(P)]と選択します。
次に、「WPF アプリケーション」を選択して、「名前(N)」に任意のプロジェクト名を指定します。ここでは「KINECT_BackgroundMask_Color」という名前を付けています。
ツールボックスからデザイン画面上に、Imageコントロールを1個配置します。Stretchプロパティには、Uniformと指定します。書き出されるXAMLコードは省略します。
Stretch列挙体については下記のURLを参照してください。
→ Stretch 列挙体(msdn)
レイアウト図は図1のようになります。
参照の追加
VS2010のメニューから「プロジェクト(P)/参照の追加(R)」と選択して、コンポーネントを追加しておきます。今回追加するのは、Microsoft.Kinect.dllだけです。.NETタブ内にこのコンポーネントが見つからない場合は、「参照」タブから、C:\Program Files\Microsoft SDKs\Kinect\v1.5\Assemblies フォルダ内のMicrosoft.Kinect.dllを指定します。
次に、ソリューションエクスプローラー内のMainWindow.xamlを展開して表示される、MainWindow.xaml.vbをダブルクリックしてリスト1のコードを記述します。
ロジックコードを記述する
リスト1 (MainWindow.xaml.vb)
Option Strict On Imports Microsoft.Kinect Class MainWindow
Bgr32形式は1ピクセルあたりのビット数が32bitのRGB形式で、先頭から1バイト(8bit)ずつ青、緑、赤、の情報が入っています。各カラーチャネルに割り当てられるbits per pixel(BBP)が8であるため、Bgr32を8で除算した4バイトの値をメンバ変数BrgPixelに格納しておきます。青、緑、赤では24ビットしか使用されません、残りの8ビットはAlphaに使用されることが多いです。
このサンプルでもAlphaに使用しています。また32ビットを8で除算した4(バイト)を直接指定しても問題ありません。
Dim BgrPixel As Integer = CInt(PixelFormats.Bgr32.BitsPerPixel / 8) ‘4 Dim kinect As KinectSensor
ウィンドウが読み込まれた時の処理
Kinect センサーが接続されていない場合は、メッセージを表示して処理を抜けます。接続されている場合はKinect センサーを取得します。
RGBカメラ、距離カメラ、スケルトンを有効にします。AddHandlerステートメントで、RGBカメラや距離カメラ、スケルトンのデータが更新された時に発生するAllFramesReadyイベントに、kinect_AllFramesReadyイベントハンドラを追加します。Kinectを動作させます。
Private Sub MainWindow_Loaded(sender As Object, e As System.Windows.RoutedEventArgs) Handles Me.Loaded Try If KinectSensor.KinectSensors.Count = 0 Then MessageBox.Show("Kinectが接続されていません") Exit Sub Else kinect = KinectSensor.KinectSensors(0) End If kinect.ColorStream.Enable() kinect.DepthStream.Enable() kinect.SkeletonStream.Enable() AddHandler kinect.AllFramesReady, AddressOf kinect_AllFramesReady kinect.Start() Catch ex As Exception MessageBox.Show(ex.Message) Close() End Try End Sub
人物だけを切り抜いて表示するKinectサンプル
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- Kinectで結成したマイ・ダンスチームを、サンプルを見ながら実際の背景に合成してみよう
- これであなたもダンスグループの一員!?Kinectで自分を分身させるプログラムを作る
- Kinectの音声認識を使って、プレイヤーを分離、結合させるデモを試してみる
- Kinectを使って、自分の手のひらに小さな分身を出現させてみる
- Kinectを使って、画面上の赤い輪をくぐるサンプル
- プレイヤーの身体パーツを判別するKinectサンプル
- Kinectを使って、顔の動きを認識して画面に表示する
- 人体の連続した動作を音声でキャプチャするKinectのサンプルプログラム
- Kinectで距離カメラの値を取得して、指定した距離で人物が背景に溶け込むサンプル
- 人物特定に使える!?実際の映像で顔を認識するKinectプログラム