開発環境は
Windows7 Ultimate 64bit SP1
Visual C# 2010 Express
KINECT SDK 1.5
KINECT for Windows
となります。
KINECT SDKは最新版をそのままインストールしているだけです。
サンプルはWPFアプリケーションです。
RGBカメラの画像を表示するサンプルです。
------------------------------------------------------------------------------
追記(2012/08/26)
プロジェクトの参照設定で「Microsoft.Kinect」を追加してください。
------------------------------------------------------------------------------
MainWindow.xaml
------------------------------------------------------------------------------
<Window x:Class="KinectRGBforSDK15.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="Rgb" Stretch="Uniform" Height="480" Width="640" />
</Grid>
</Window>
------------------------------------------------------------------------------
イメージコントロールを1つだけ配置しています。
MainWindows.xaml.cs
------------------------------------------------------------------------------
using System;
using System.Windows;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using Microsoft.Kinect;
namespace KinectRGBforSDK15
{
/// <summary>
/// MainWindow.xaml の相互作用ロジック
/// </summary>
public partial class MainWindow : Window
{
KinectSensor kinect;
public MainWindow()
{
InitializeComponent();
//接続の確認
if (KinectSensor.KinectSensors.Count == 0)
{
MessageBox.Show("KINECTが見つかりません。");
Close();
}
kinect = KinectSensor.KinectSensors[0];
//RGBカメラの設定
kinect.ColorStream.Enable(ColorImageFormat.RgbResolution640x480Fps30);
//イベントの登録
kinect.ColorFrameReady += new EventHandler<ColorImageFrameReadyEventArgs>(kinect_colorFrameReady);
//KINECTのスタート
kinect.Start();
}
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void kinect_colorFrameReady(object sender, ColorImageFrameReadyEventArgs e)
{
using (ColorImageFrame colorFrame = e.OpenColorImageFrame())
{
if (colorFrame != null)
{
//RGBカメラのビットイメージデータ
byte[] colorPixel = new byte[colorFrame.PixelDataLength];
colorFrame.CopyPixelDataTo(colorPixel);
//ビットマップイメージの作成
Rgb.Source = BitmapSource.Create(colorFrame.Width, colorFrame.Height, 96, 96, PixelFormats.Bgr32, null, colorPixel, colorFrame.Width * colorFrame.BytesPerPixel);
}
}
}
}
}
------------------------------------------------------------------------------
エラー処理などは省略していますが、RGBカメラの画像を表示するだけならこれだけの記述でできます。
イベント内で取り出しているKINECTからのデータは32ビットのカラーイメージ(BGR8ビット+αチャンネル8ビット。ただしαチャンネルは0で固定 空きチャンネル8ビット)です。
これは640*480の画像1ピクセルを4バイトで表現していることになります。
WPFのイメージコントロールであつかえるビットマップイメージはBRG32形式に対応しているのでKINECTからのカラーイメージデータを元にそのままビットマップイメージを作ることができます。
0 件のコメント:
コメントを投稿