2012年8月25日土曜日

KINECTサンプル(C#) RGBカメラ for SDK1.5

以前の投稿から時間が過ぎてしまいましたが、ここ最近また色々プログラムを書いているので備忘録として基本的なサンプルプログラムを掲載します。

開発環境は

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 件のコメント:

コメントを投稿