Kinect v2のカメラから画像を取り込んで表示する基本プログラム
2014年9月10日(水)
参照設定
ソリューションエクスプローラー内の「参照設定」に、Microsoft.Kinect.dllを追加する必要があります。この手順については第1回で解説していますので、そちらを参照してください。
ロジックコードを記述する
次に、ソリューションエクスプローラー内のMainWindow.xamlを展開して表示される、MainWindow.xaml.vbをダブルクリックしてリスト2のコードを記述します。
Imports Microsoft.Kinect (1) Class MainWindow Private myKinect As KinectSensor (2) Private myColorFrameReader As ColorFrameReader = Nothing (3) Private colorBitmap As WriteableBitmap = Nothing (4) Private ColorImagePixelData As Byte() (5) Private BytesPerPixel As Integer = 4 ‘CInt(PixelFormats.Bgr32.BitsPerPixel / 8) (6)
- Kinectの使用を可能にするために、Microsoft.Kinect名前空間をインポートします。次は、メンバー変数を宣言します。
- Kinectセンサーを表すクラスであるKinectSensor型のメンバー変数myKinectを宣言します。
- カラーフレームリーダーを表すクラスであるColorFrameReader型のメンバー変数myColorFrameReaderを宣言します。
- WriteableBitmapクラス型のメンバー変数colorBitmapを宣言します。WriteableBitmapは、書き込みおよび更新が可能なBitmapSource を提供するクラスで、BitmapSourceは単一の一定なピクセルセットを、特定のサイズおよび解像度で表わすクラスを意味します。
- バイト型の配列であるメンバー変数ColorImagePixelDataを宣言します。6. Integer型のメンバー変数BytePerPixelを宣言し、「4」で初期化しておきます。この「4」という値は、32ビットフルカラーのRGB形式で、先頭から1バイト(8ビット)ずつ「青」、「緑」、「赤」の情報が入っており、各カラーチャネルに割り当てられる「bits per pixel(BPP)」が「8」のため、Bgr32を「8」で除算した「4」バイトを意味します。「青」、「緑」、「赤」では24ビットしか使用されませんが、残りの8ビットは「Alpha(不透明度)」に使用されることが多いです。「4」という直接的な値ではなく
CInt(PixelFormats.Bgr32.BitsPerPixel / 8)
と記述しても同じです。
ウインドウが読み込まれた時の処理
続いて、ウインドウが読み込まれた際の処理です。
Private Sub MainWindow_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded myKinect = KinectSensor.GetDefault (1) If myKinect Is Nothing = False Then myColorFrameReader = myKinect.ColorFrameSource.OpenReader(2) Dim myColorFrameDescripton As FrameDescription = myKinect.ColorFrameSource.CreateFrameDescription(ColorImageFormat.Bgra) (3) ColorImagePixelData = New Byte(myColorFrameDescripton.Width * myColorFrameDescripton.Height * BytesPerPixel - 1) {} colorBitmap = New WriteableBitmap(myColorFrameDescripton.Width, myColorFrameDescripton.Height, 96.0, 96.0, PixelFormats.Bgr32, Nothing) (4) AddHandler myColorFrameReader.FrameArrived, AddressOf myColorFrameReader_FrameArrived (5) myKinect.Open() (6) End If End Sub
- 最初に、Kinectセンサーを使用可能にします。Kinectセンサーが使用可能な状態にある場合は、以下の処理を行います。
- カラーフレームのソースを取得する、ColorFrameSourceのOpenReaderメソッドで、カラーフレームのソースフレームのリーダーを開きます。
- KinectSensorからのイメージフレームのプロパティを表わすクラスである、FrameDescriptionクラス型の変数myColorFrameDescriptionを宣言し、ColorFrameSource.CreateFrameDesciptionメソッドで、指定した形式のColorFrameのFrameDescription オブジェクトを作成します。この場合は、ColorImageFormatが「Bgra形式」のFrameDescriptionオブジェクトを作成します。簡単にいうと、「BGRA形式」のカラー画像の情報を作成することになります。次にバイト配列を作成します。
- 指定したパラメーターを使用して、WriteableBitmapのインスタンスを作成します。WriteableBitmapの書式は下記の通りです。
WriteableBitmap(pixelWidth,pixelHeight,dpiX,dpiY,pixelFormat,palette)
「dpiX」は「ビットマップの水平ドット/インチ」を、「dpiY」は「ビットマップの垂直ドット/インチ」を表します。通常は両方とも「96.0」を指定します。「PixelFormat」には「Bgr32」を指定し、「palette」には「Nothing」と指定しておきます。「PixelFormats.Bgr32」は、「Bgr32ピクセル形式」を取得します。 「Bgr32」は、ピクセルあたりのビット数 (BPP) が「32」の「sRGB 形式」です。 各カラーチャネル (青、緑、および赤) に割り当てられるピクセルあたりのビット数 (BPP) は「8」になります。 - AddHandlerステートメントで、ColorFrameReaderのFrameArrivedイベントに、イベントハンドラを指定します。FrameArrivedイベントは、カラーフレームが到着した時に発生するイベントです。
- OpenメソッドでKinectセンサーを開きます。
連載バックナンバー
Think ITメルマガ会員登録受付中
Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。
全文検索エンジンによるおすすめ記事
- Kinect v2を使って、机の上のリンゴをつかんで移動してみる
- Kinect v2で実現する打楽器のバーチャル演奏
- Kinect v2を使った「じゃんけんゲーム」を作る
- Kinect v2の音声認識で「仮面」を選んで変身してみる
- Kinect v2のジェスチャーでBing Mapsを未来的に直感操作する
- Kinectを使って、画面上の赤い輪をくぐるサンプル
- Kinectで結成したマイ・ダンスチームを、サンプルを見ながら実際の背景に合成してみよう
- 人物を切り抜いて画面に表示するKinectサンプル
- 人物特定に使える!?実際の映像で顔を認識するKinectプログラム
- これであなたもダンスグループの一員!?Kinectで自分を分身させるプログラムを作る