基本的にC#版と同じです。
MainWindow.xaml
------------------------------------------------------------------------------
<Window x:Class="MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="520" Width="700">
<Grid>
<Image Name="DepthImg" Stretch="Uniform" Height="480" Width="640" />
</Grid>
</Window>
------------------------------------------------------------------------------
イメージコントロールを1つ配置しています。
MainWindow.xaml.vb
------------------------------------------------------------------------------
Imports Microsoft.Kinect
Class MainWindow
Inherits Window
Private kinect As KinectSensor
Private colorPixel As Byte()
Private depthPixel As Short()
''' <summary>
'''
''' </summary>
''' <remarks></remarks>
Public Sub New()
' この呼び出しはデザイナーで必要です。
InitializeComponent()
' InitializeComponent() 呼び出しの後で初期化を追加します。
''接続の確認
If KinectSensor.KinectSensors.Count = 0 Then
MessageBox.Show("KINECTが見つかりません。")
Exit Sub
End If
End Sub
''' <summary>
'''
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
''' <remarks></remarks>
Private Sub Window_Loaded(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded
kinect = KinectSensor.KinectSensors(0)
''Depthカメラの設定
kinect.DepthStream.Enable(DepthImageFormat.Resolution640x480Fps30)
''データ用配列の準備
colorPixel = New Byte(kinect.DepthStream.FramePixelDataLength * 4 - 1) {}
depthPixel = New Short(kinect.DepthStream.FramePixelDataLength - 1) {}
''イベントの登録
AddHandler kinect.DepthFrameReady, AddressOf kinect_depthFrameReady
''KINECTのスタート
kinect.Start()
End Sub
''' <summary>
'''
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
''' <remarks></remarks>
Private Sub kinect_depthFrameReady(ByVal sender As Object, ByVal e As DepthImageFrameReadyEventArgs)
Using depthFrame As DepthImageFrame = e.OpenDepthImageFrame
If depthFrame Is Nothing = False Then
''Depthカメラのデータを取得
depthFrame.CopyPixelDataTo(depthPixel)
''距離データから画像を生成
Dim i As Integer
Dim j As Integer = 0
Dim depth As Short
Dim dist As Byte
For i = 0 To depthPixel.Length - 1
''距離データの取り出し
depth = CShort(depthPixel(i) >> DepthImageFrame.PlayerIndexBitmaskWidth)
''画素データに変換 SDKのサンプルを参照
dist = CByte((depth + 1) And Byte.MaxValue)
''距離データを100分率で表現
''dist = CByte(255 - (255 * depth / 4095))
''//距離データ 13ビットを4ビットシフトしてから8ビット分だけ取り出す場合
''dist = CByte((depth + 1) >> 4 And Byte.MaxValue)
''RGBイメージに書込み
colorPixel(j) = dist
colorPixel(j + 1) = dist
colorPixel(j + 2) = dist
j = j + 4
Next
DepthImg.Source = BitmapSource.Create(depthFrame.Width, depthFrame.Height, 96, 96, PixelFormats.Bgr32, Nothing, colorPixel, depthFrame.Width * 4)
End If
End Using
End Sub
End Class
------------------------------------------------------------------------------
C#版とは違いはありません。
Depthイメージをそのまま表示することはほとんどないでしょうが、データ構造を理解するのには知っておく必要があるのではないかと思います。
次は骨格認識の予定です。
0 件のコメント:
コメントを投稿