kinect开发入门学习笔记

本文是关于Kinect开发的入门学习笔记,主要介绍了如何在Windows环境下使用Visual Studio 2010/2012及Kinect for Windows SDK进行开发。内容包括设置编译环境、获取彩色图像(普通质量与高质量)、选择色彩格式以及处理红外图像。通过实例代码展示了如何获取和显示彩色及红外图像。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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获取彩色图像

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

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

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

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

3、在SDKAPI中,色彩图像类型用每句类型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);

 

运行效果

开灯状态下:

 

 

 

 

 

 

 

 

 

 

 

 

 

关灯状态下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值