人物を切り抜いて画面に表示するKinectサンプル

今回のサンプルは、人物の座標のみRGBデータを取得することで、その人物を画面上に切り抜いて表示するサンプルを作成します。サンプルを実行すると、画面上にはプレイヤー(人物)だけが表示されます。背景は透明化されているため、あらかじめ背景画像を用意しておけば、合成することも可能です。まずは切り抜いたとこ

薬師寺 国安

2012年8月2日 20:00

今回のサンプルは、人物の座標のみRGBデータを取得することで、その人物を画面上に切り抜いて表示するサンプルを作成します。

サンプルを実行すると、画面上にはプレイヤー(人物)だけが表示されます。背景は透明化されているため、あらかじめ背景画像を用意しておけば、合成することも可能です。まずは切り抜いたところまでの動画を御覧ください。

動画を見ていただくとわかりますが、頭部のあたりの切り抜きがギザギザになっています。現状のSDK 1.5ではこれが限界のようです。

サンプル一式は、会員限定特典としてダウンロードできます。記事末尾をご確認ください。

プロジェクトの作成

VS 2010のメニューから[ファイル(F)/新規作成(N)/プロジェクト(P)]と選択します。

次に、「WPF アプリケーション」を選択して、「名前(N)」に任意のプロジェクト名を指定します。ここでは「KINECT_BackgroundMask_Color」という名前を付けています。

ツールボックスからデザイン画面上に、Imageコントロールを1個配置します。Stretchプロパティには、Uniformと指定します。書き出されるXAMLコードは省略します。

Stretch列挙体については下記のURLを参照してください。
→ Stretch 列挙体(msdn)

レイアウト図は図1のようになります。

図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

人気記事トップ10

人気記事ランキングをもっと見る

企画広告も役立つ情報バッチリ! Sponsored

ClickHouse Cloudが実現した広告運用SaaS「ATOM」のデータ基盤革新、パフォーマンスを向上しながら、運用負荷とコストを削減 11月11日 6:20 AIで開発が加速する時代、品質保証はどう変わる? Tricentisが示すAIエージェント活用の実像 11月9日 6:45 悪用までの猶予が「1分」に迫るフロンティアAI時代に開発と本番を貫く脆弱性管理が必要 10月29日 8:30 欧州CRA対応とSBOM運用。AI生成コードのOSS混入問題の対策とは ――スニペット単位で検出する「FossID」「Insignary Clarity」によるSBOM運用 9月16日 6:40 PostgreSQLからTiDBへ、稼働中SaaSで進める段階的DB移行の実践と再設計への展望 9月7日 6:30 機能安全開発におけるGoogleTestの活用を支援!「Parasoft C/C++test CT」で実現する効率化&AI連携 4月14日 6:30 【CNDW2025】Grafanaが明かす「オブザーバビリティの哲学」ー最小限の労力で実用的なインサイトを得るには 1月23日 6:30 【CNDW2025】プロダクト急増に備える基盤刷新 ーウェルスナビがECSからEKSへの移行で得た知見とは 1月15日 6:30 【CNDW2025】250環境を5人で運用、構築時間は30分に ーKINTOテクノロジーズが語るインフラ基盤組織の作り方 2025年12月18日 6:30 新たな自動化で熱視線! AIエージェントの「推論能力」を支える2つのコンポーネントとは? 2025年11月28日 6:30