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

进行本节的前提是已配置好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();
        }
    }
}

运行结果如下图:

这里写图片描述

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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值