您的位置:首页 > 其它

kinect开发入门学习笔记

2014-06-05 16:48 316 查看
Kinect 开发入门笔记

------第一节 Kinect 彩色和红外图像的处理

一、编译环境支持:

Windows 7/windows 8

Microsoft Visual Stuio 2010/2012

Kinect for windows SDK

Ps:SDK可以在微软官网获取。

你可以在 http://msdn.microsoft.com/zh-CN/ MSDN微软开发人员网站

http://msdn.itellyou.cn MSDN我告诉你

获得相关技术文档的支持。

SDK下载好后,直接安装即可。

二、kinect获取彩色图像

1、kinect获取的彩色图像有两种质量,普通质量与高质量。这两中质量决定了传输的速度。可根据需求选取。

2、彩色数据可以选择两种色彩格式,这两种色彩格式决定了返回应用的图像数据是以RGB形式还是YUV形式编码。

A:RGB格式在sRGB色彩空间提供32位线性X8R8G8B8格式的彩色位图

B:YUV格式提供16位伽马校正的线性UYVY格式色彩位图,YUV色彩空间的伽马校正等价于RGB色彩空间的sRGB伽马校正。由于YUV流中每个像素只有16位,因此用这种格式保存位图数据时占用的存储空间少,调用NuiImageStreamOpen函数时只需分配较小缓存。

3、在SDK的API中,色彩图像类型用每句类型ColorImageFormat 表示,枚举值的表如下图。

4.调用API获取彩色图像。

1.打开VS2010,创建一个WPF工程,对其命名为KinectColorViewer

2:在解决方案菜单中,右键项目,添加引用。

3:在弹出菜单栏的.NET一栏里,找到Microsoft.kinect并添加该引用。

4:添加控件,在MainWindow.xaml文件的设计器中添加一个Image控件。

代码如下:

<Grid>

<Image Height="311" HorizontalAlignment="left"

Name="ColorImage" Stretch="Fill" VerticalAlignment="Top" Width="503" />

</Grid>

5:在MainWindow.xaml.cs文件中添加头文件

using Microsoft.Kinect;

6:定义KinectSensor对象。在MainWindow.xaml.cs 文件的MainWindow类中,声明如下两个变量:

private byte[] pixelDate;

KinectSensor kinectSensor;

7:在Loaded事件处理函数中添加KinectSensor对象的初始化代码。先附上代码,之后再详细讲解。

在使用完kinect后要,关闭。使用Stop()实现:

private void Window_Loaded(object sender, RoutedEventArgs e)

{

kinectSensor = (from sensor in KinectSensor.KinectSensors

where sensor.Status == KinectStatus.Connected

select sensor).FirstOrDefault();

kinectSensor.ColorStream.Enable(ColorImageFormat.RgbResolution640x480Fps30);

kinectSensor.Start();

kinectSensor.ColorFrameReady += KinectSensor_ColorFrameReady;

}

private void Window_Closed(object sender, EventArgs e)

{

kinectSensor.Stop();

}

8:接受视频数据,定义kinectSensor_ColorFrameReady()事件处理获取的视频数据,并将获取到的数据显示出来。定义如下:

private void KinectSensor_ColorFrameReady(object sender, ColorImageFrameReadyEventArgs e)

{

using (ColorImageFrame ImageFrame = e.OpenColorImageFrame())

{

if (ImageFrame != null)

{

this.pixelDate = new byte[ImageFrame.PixelDataLength];

ImageFrame.CopyPixelDataTo(this.pixelDate);

this.ColorImage.Source = BitmapSource.Create(ImageFrame.Width,

ImageFrame.Height, 96, 96,

PixelFormats.Bgr32, null, pixelDate,

ImageFrame.Width * ImageFrame.BytesPerPixel);

}

}

}

编译运行,结果》》

四、红外图像的获取

红外图像只是彩色图像的一种特殊格式,所以获取红外图像只需修改两处代码

1:修改图像格式。



kinectSensor.ColorStream.Enable(ColorImageFormat.RgbResolution640x480Fps30);

改为

kinectSensor.ColorStream.Enable(ColorImageFormat.InfraredResolution640x480Fps30);

同时,因为ColorImageFormat.InfraredResolution640x480Fps30是红外图像的格式类型,由于红外图像的16位的灰度图像,因此要更改显示图像的语句。



this.ColorImage.Source = BitmapSource.Create(ImageFrame.Width,

ImageFrame.Height, 96, 96,

PixelFormats.Bgr32, null, pixelDate,

ImageFrame.Width * ImageFrame.BytesPerPixel);

替换成

this.ColorImage.Source = BitmapSource.Create(ImageFrame.Width,

ImageFrame.Height, 96, 96,

PixelFormats.Gray16, null, pixelDate,

ImageFrame.Width * ImageFrame.BytesPerPixel);

运行效果

开灯状态下:

关灯状态下:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: