Kinect v2のIRセンサーから赤外線画像を読み込む
2014年9月24日(水)
ウインドウが読み込まれた時の処理
次は、ウインドウが読み込まれた際の処理を記述します。
Private Sub MainWindow_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded myKinectSensor = KinectSensor.GetDefault (1) myInfraredDescription = myKinectSensor.InfraredFrameSource.FrameDescription (2) myInfraredFrameReader = myKinectSensor.InfraredFrameSource.OpenReader (3) myInfraredBitmap = New WriteableBitmap(myInfraredDescription.Width, myInfraredDescription.Height, 96.0, 96.0, PixelFormats.Gray16, Nothing) (4) AddHandler myInfraredFrameReader.FrameArrived, AddressOf myInfraredFrameReader_FrameArrived (5) myKinectSensor.Open() End Sub
- まずKinectセンサーを使用可能にします。
- myKinectSensor.InfraredFrameSource.FrameDescriptionで、赤外線フレームソースの赤外線フレームのプロパティを取得して、メンバー変数myInfraredDescriptionで参照します。
- InfraredFrameSource.OpenReaderメソッドで、赤外線フレームを開きます。
- 次に、WriteableBitmapのパラメータで初期化された、新しいインスタンス、myInfraredBitmapオブジェクトを作成します。WriteableBitmapの書式については第2回目を参照してください。今回は、PixelFormatsに「Gray16」を指定しています。「PixelFormats.Gray16」は、ピクセルあたりのビット数が「16」(65536段階)のグレースケールチャネルを表示できるピクセル形式を取得します。
- AddHandlerステートメントで、InfraredFrameReaderのFrameArrivedイベントにイベントハンドラを指定します。FrameArrivedイベントは、赤外線フレームが到着した時に発生するイベントです。
- OpenメソッドでKinectセンサーを開きます。
赤外線フレームが到着した時に発生するイベント
リスト3の(5)で指定したイベントハンドラの内容を記述します。
Private Sub myInfraredFrameReader_FrameArrived(sender As Object, e As InfraredFrameArrivedEventArgs) Using myInfraredFrame As InfraredFrame = e.FrameReference.AcquireFrame (1) If myInfraredFrame Is Nothing = True Then Return End If Dim myInfraredBuffer As UShort() = New UShort(myInfraredDescription.Width * myInfraredDescription.Height - 1) {} (2) myInfraredFrame.CopyFrameDataToArray(myInfraredBuffer) (3) myInfraredBitmap.WritePixels(New Int32Rect(0, 0, myInfraredBitmap.PixelWidth, myInfraredBitmap.PixelHeight), myInfraredBuffer, myInfraredBitmap.PixelWidth * myBytesPerPixel, 0) (4) Image1.Source = myInfraredBitmap (5) End Using End Sub
- e.FrameReference.AcquireFrameメソッドで赤外線フレームを取得し、myInfraredFrameで参照します。
- UShort型の配列変数myInfraredBufferを宣言します。この配列変数の要素数はWidth(512)とHeight(424)の値を乗じた値となります。Color画像以外のDepth画像と赤外線画像の解像度は、512×424になります。
- CopyFrameDataToArrayメソッドで、赤外線フレームデータをUShort型配列にコピーします。書式は下記の通りです。
CopyFrameDataToArray (frameData)
frameDataには赤外線フレームデータをコピーする先の配列を指定します。この場合はUShort型の配列変数myInfraredBufferを指定しています。 - myInfraredBitmap(WriteableBitmapクラス)のWritePixelsメソッドで、ビットマップの指定した領域内のピクセルを更新します。書式については第2回目を参照してください。
- Image1のSourceプロパティにmyInfraredBitmapオブジェクトを指定します。これで赤外線センサーからの画像が表示されます。
ウインドウが閉じられる時の処理
最後は、ウインドウが閉じられる際の処理を記述します。
Private Sub MainWindow_Closing(sender As Object, e As ComponentModel.CancelEventArgs) Handles Me.Closing If myInfraredFrameReader Is Nothing = False Then myInfraredFrameReader.Dispose() (1) myInfraredFrameReader = Nothing End If If myKinectSensor Is Nothing = False Then myKinectSensor.Close() (2) myKinectSensor = Nothing End If End Sub End Class
- myInfraredFrameReaderをDisiposeし、全ての関連付けから解放します。
- Kinectセンサーも閉じ、全ての関連付けから解放します。
プログラムを実行すると、図2のように表示されます。
次回からは、ゲームや3Dコンテンツの統合開発エンジンであるUnityからKinect v2を利用する方法をご紹介します。
連載バックナンバー
Think ITメルマガ会員登録受付中
Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。
全文検索エンジンによるおすすめ記事
- Kinect v2の深度センサーから取り込んだ画像を表示する
- Kinect v2のカメラから画像を取り込んで表示する基本プログラム
- Kinect v2を使って、机の上のリンゴをつかんで移動してみる
- Kinect v2で実現する打楽器のバーチャル演奏
- Kinect v2の音声認識で「仮面」を選んで変身してみる
- Kinect v2のジェスチャーでBing Mapsを未来的に直感操作する
- Kinect v2を使った「じゃんけんゲーム」を作る
- Kinectを使って、画面上の赤い輪をくぐるサンプル
- Kinectを使って、自分の手のひらに小さな分身を出現させてみる
- 人物特定に使える!?実際の映像で顔を認識するKinectプログラム