Kinect v2のカメラから画像を取り込んで表示する基本プログラム
2014年9月10日(水)
カラーフレームが到着した時に発生するイベントの処理
リスト3で指定したイベントハンドラを記述していきます。
Private Sub myColorFrameReader_FrameArrived(sender As Object, e As ColorFrameArrivedEventArgs) Using myColorFrame As ColorFrame = e.FrameReference.AcquireFrame (1) If myColorFrame Is Nothing = True Then Return End If myColorFrame.CopyConvertedFrameDataToArray(ColorImagePixelData, ColorImageFormat.Bgra) (2) End Using colorBitmap.WritePixels(New Int32Rect(0, 0, colorBitmap.PixelWidth, colorBitmap.PixelHeight), ColorImagePixelData, colorBitmap.PixelWidth * BytesPerPixel, 0) (3) Image1.Source = colorBitmap (4) End Sub
- e.FrameReference.AcquireFrameメソッドでカラーフレームを取得し、myColorFrameで参照します。
- CopyConvertedFrameDataToArrayメソッドで、フレームから「BGRA形式」のバイト列に変換し、バイト配列に格納します。書式は下記の通りです。
CopyConvertedFrameDataToArray(frameData,colorFomat)
frameDataには格納する配列、この場合は、バイト配列のColorImagePixelDataを指定しています。colorFormatには「色の形式」を指定します。この場合は、「Bgra形式」を指定しています。 - colorBitmap(WriteableBitmapクラス)のWritePixelsメソッドで、ビットマップの指定した領域内のピクセルを更新します。書式は下記の通りです。
WritePixels(sourecRect,pixels,stride,offset)
「sourceRect」には「Int32Rect型」を指定します。更新するWriteableBitmapの四角形です。「pixels」にはビットマップの更新に使用する「ピクセル配列」を指定します。この場合は、ColorImagePixelDataのバイト列を指定しています。「stride」にはpixels内の更新領域の「ストライド」を指定します。今回はcolorBitmapのPixelWidthに「4」を乗算した値を指定しています。「ストライド」とは、画像データのX座標横一列あたりに用いられるバイト数を示す値です。例えば、横幅が512ピクセルで、RGBA各色8ビット(32ビットカラー)で表現される画像データのストライドは、
512(ピクセル)×4(バイト)=2048
となります。今回の場合はRGBカラーの解像度が1920×1080(ピクセル)であるため
1920×4=7680
の値がstrideに適用されることになります。「offset」には入力バッファのオフセットを指定します。今回は「0」を指定しています。 - Image1のSourceプロパティにcolorBitmapオブジェクトを指定します。これでRGBカメラからの画像が表示されます。
ウインドウが閉じられる時の処理
最後は、ウインドウが閉じられる際の処理です。
Private Sub MainWindow_Closing(sender As Object, e As ComponentModel.CancelEventArgs) Handles Me.Closing If myColorFrameReader Is Nothing = False Then myColorFrameReader.Dispose() (1) myColorFrameReader = Nothing End If If myKinect Is Nothing = False Then myKinect.Close() (2) myKinect = Nothing End If End Sub End Class
- ColorFrameReaderをDisposeし、全ての関連付けから解放します。
- Kinectセンサーも閉じ、全ての関連付けから解放します。
実行すると図2のように表示されます。
今回の「Color画像」の表示コードが、Kinectを操作するうえでの基本的な流れになります。以下のような流れになります。
Kinectセンサー
→Openメソッド
→ColorFrameSource
→OpenReaderメソッド
→ColorFrameReader
→FrameArrivedイベント
→ColorFrameReference
→AcquireFrameメソッド
→ColorFrame→CopyConvertedFrameDataToArrayメソッド
→WritePixelsメソッド
→Image1.Sourceに表示
次回は、Depth画像の取り込みに挑戦します。
連載バックナンバー
Think ITメルマガ会員登録受付中
Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。
全文検索エンジンによるおすすめ記事
- Kinect v2を使って、机の上のリンゴをつかんで移動してみる
- Kinect v2で実現する打楽器のバーチャル演奏
- Kinect v2を使った「じゃんけんゲーム」を作る
- Kinect v2の音声認識で「仮面」を選んで変身してみる
- Kinect v2のジェスチャーでBing Mapsを未来的に直感操作する
- Kinectを使って、画面上の赤い輪をくぐるサンプル
- Kinectで結成したマイ・ダンスチームを、サンプルを見ながら実際の背景に合成してみよう
- 人物を切り抜いて画面に表示するKinectサンプル
- 人物特定に使える!?実際の映像で顔を認識するKinectプログラム
- これであなたもダンスグループの一員!?Kinectで自分を分身させるプログラムを作る