您的位置:首页 > 其它

Kinect入门(1)——显示彩色图像数据流

2015-09-14 14:55 567 查看

进行本节的前提是已配置好Kinect的开发环境

废话不多说,直接进入正题!

Kinect+VS2012显示彩色图像数据流

1、新建C# WPF应用程序,项目名随便写即可。



2、在解决方案“….”里右击“引用”—>添加引用,



然后在”搜索程序集”那里搜索”Microsoft.Kinect”,然后添加即可。



3、在WPF里添加必要的属性和元素.

<Window x:Class="ColorView.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="500" Width="650" Loaded="Window_Loaded_1" Closed="Window_Closed_1">
<Grid>
<!--创建一个画布-->
<Canvas Name="CanvasWindow" Height="480" Width="640">
<Image Name="ColorName" Height="480" Width="640"/>
</Canvas>

</Grid>
</Window>


其中后两组Height、Width属性最好与图像的高和宽对应成比例;“

Loaded”和Closed“”属性在源码中会对应生成相应的函数(见下文源码),可根据提示按“Tab”键添加;

“ColorName”是我们要显示彩色图像的元素的名字,源码中会用到;

“CanvasWindow”在本篇中暂时用不到,所以随便写或者不用添加也行。

4、源码解读

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

//*****************************************添加Kinect引用********************************
using Microsoft.Kinect;

namespace ColorView
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{

public MainWindow()
{
InitializeComponent();
}

//********************************私有属性****************************
private KinectSensor kinectSensor;//Kinect传感器对象
private byte[] colorPixelData;//存储彩色数据流中的像素数据

//******************************加载窗口函数**************************
//该函数就是在WPF中添加"Loaded"时自动添加的函数
private void Window_Loaded_1(object sender, RoutedEventArgs e)
{
//1、Kinect传感器初始化
kinectSensor = KinectSensor.KinectSensors[0];
//2、彩色数据流初始化
kinectSensor.ColorStream.Enable(ColorImageFormat.RgbResolution1280x960Fps12);
//3、注册彩色数据流事件
kinectSensor.ColorFrameReady += kinectSensor_ColorFrameReady;
//4、启动Kinect
kinectSensor.Start();
}

//****************************彩色数据流处理事件**********************
private void kinectSensor_ColorFrameReady(object sender, ColorImageFrameReadyEventArgs e)
{
using (ColorImageFrame colorImageFrame = e.OpenColorImageFrame())
{
if (colorImageFrame != null)
{
//1、用来存储彩色像素的数组(BGRA BGRA BGRA BGRA BGRA)
colorPixelData = new byte[colorImageFrame.PixelDataLength];
//2、把彩色数据帧中的彩色像素复制到:colorPixelData
colorImageFrame.CopyPixelDataTo(colorPixelData);
//3、将彩色像素数据赋给画布上Name=ColorName的Image元素
ColorName.Source = BitmapSource.Create(colorImageFrame.Width, colorImageFrame.Height, 96, 96,
PixelFormats.Bgr32, null, colorPixelData, colorImageFrame.Width * 4);
}
}
}

//*****************************关闭窗口函数***************************
//该函数就是在WPF中添加"Closed"时自动添加的函数
private void Window_Closed_1(object sender, EventArgs e)
{
//当准备关闭Kinect时,检查Kinect是否仍处于链接状态,
if (kinectSensor != null && kinectSensor.Status == KinectStatus.Connected)
kinectSensor.Stop();
}
}
}


运行结果如下图:



如果按以上步骤操作的话,上述代码直接复制过去应该可以直接运行

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