本程序为自己所写,参考素材包括微软官方例子和外文资料,自己做了部分的优化。解释的如果有问题,恳请大家指正.

后台代码:

using System.ComponentModel;
using System.Windows;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using Microsoft.Kinect;

namespace KinectV2
{
    /// <summary>
    /// MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        #region 定义变量

        // kinect设备
        KinectSensor kinect;

        //彩色帧读取
        ColorFrameReader colorFrameReader;

        //一帧图像的性质描述
        FrameDescription colorFrameDesc;

        //枚举类型,定义彩色帧的格式(共6种)
        //此处规定彩色帧格式为Bgra格式:4字节存储一个像素点,包含blue,green,red,alpha(即像素点亮度值)
        ColorImageFormat colorFormat = ColorImageFormat.Bgra;

        //创建用于显示图像的位图
        WriteableBitmap colorBitmap;

        //用于存放一帧彩色图像的所有信息(byte 类型,每个元素占一个字节)
        byte[] colorBuffer;

        //一帧彩色图像的步长(物理意义:此处表示一帧图像的每一行需占用的字节个数)(作用:渲染位图时需要提供图像的步长)
        int colorStride;

        //存放彩色图像的矩形画布(作用:渲染位图时需要提供画布位置和大小)
        Int32Rect colorRect;

        #endregion

        public MainWindow()
        {
            InitializeComponent();

            #region 变量初始化、赋值

            // 获取默认的kinect传感器
            kinect = KinectSensor.GetDefault();

            //启动传感器
            kinect.Open();

            //确定彩色帧的数据类型
            colorFrameDesc = kinect.ColorFrameSource.CreateFrameDescription(colorFormat);

            // 创建并返回一个新的读取对象
            colorFrameReader = kinect.ColorFrameSource.OpenReader();

            //触发彩色帧事件
            colorFrameReader.FrameArrived += colorFrameReader_FrameArrived;

            //彩色位图初始化(96,96表示分辨率,即96像素/英寸)
            colorBitmap = , , PixelFormats.Bgra32, null);

            //图像步长初始化
            colorStride = colorFrameDesc.Width * (int)colorFrameDesc.BytesPerPixel;//(int)colorFrameDesc.BytesPerPixel = 4,每个像素点占4字节

            //画布矩形框初始化
            colorRect = , , colorFrameDesc.Width, colorFrameDesc.Height);

            //计算总共需要多少个字节才能储存一帧图像的所有像素点
            colorBuffer = new byte[colorStride * colorFrameDesc.Height];

            //彩色位图和UI界面图片控件关联
            ImageColor.Source = colorBitmap;    //即实时的将获取的彩色帧信息描绘在ImageColor控件中

            #endregion
        }

        #region 处理来自传感器的彩色帧 事件

        //彩色帧触发事件
        void colorFrameReader_FrameArrived(object sender, ColorFrameArrivedEventArgs e)
        {
            //更新彩色帧,然后描绘彩色帧
            UpdateColorFrame(e);
            DrawColorFrame();
        }

        private void UpdateColorFrame(ColorFrameArrivedEventArgs e)
        {
            // 获取一帧彩色图像
            using (var colorFrame = e.FrameReference.AcquireFrame())
            {
                if (colorFrame == null)
                {
                    return;
                }
                // 将一帧彩色图像数据以‘colorFormat’格式拷贝放到‘colorBuffer’中
                colorFrame.CopyConvertedFrameDataToArray(colorBuffer, colorFormat);
            }
        }

        private void DrawColorFrame()
        {
            // 将获取的一帧彩色图像数据更新到位图中
            colorBitmap.WritePixels(colorRect, colorBuffer, colorStride, );
        }
        #endregion

        //程序窗口关闭事件
        private void Window_Closing(object sender, CancelEventArgs e)
        {
            // 释放彩色帧资源
            if (colorFrameReader != null)
            {
                colorFrameReader.Dispose();
                colorFrameReader = null;
            }
            //关闭kinect传感器
            if (kinect != null)
            {
                kinect.Close();
                kinect = null;
            }
        }

    }
}

XAML界面代码:

<Window x:Class="KinectV2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Closing="Window_Closing" >
    <Grid Width=">
        <Image x:Name="ImageDepth"  />
    </Grid>
</Window>

Kinect V2 基础教程之彩色图像的更多相关文章

  1. Kinect v2控制鼠标原理分析和源码

    https://blog.csdn.net/baolinq/article/details/54381284 此程序为利用Kinect v2实现用手指隔空控制鼠标,是我另一个项目的一部分,因为在另外那 ...

  2. 【翻译】Kinect v2程序设计(C++) Body 篇

    Kinect SDK v2预览版的主要功能的使用介绍,基本上完成了.这次,是关于取得Body(人体姿势)方法的说明.   上一节,是使用Kinect SDK v2预览版从Kinect v2预览版取得B ...

  3. 【翻译】Kinect v2程序设计(C++) Color篇

    Kinect SDK v2预览版,获取数据的基本流程的说明.以及取得Color图像的示例程序的介绍. 上一节,是关于当前型号Kinect for Windows(后面称作Kinect v1)和次世代型 ...

  4. C#基础教程/适合初学者

    C#基础教程 第一章       C#语言基础 本章介绍C#语言的基础知识,希望具有C语言的读者能够基本掌握C#语言,并以此为基础,能够进一步学习用C#语言编写window应用程序和Web应用程序.当 ...

  5. SQL Server2012 T-SQL基础教程--读书笔记(5-7章)

    SQL Server2012 T-SQL基础教程--读书笔记(5-7章) SqlServer T-SQL 示例数据库:点我 Chapter 05 表表达式 5.1 派生表 5.1.1 分配列别名 5. ...

  6. Spring Boot 2.x基础教程:Swagger静态文档的生成

    前言 通过之前的两篇关于Swagger入门以及具体使用细节的介绍之后,我们已经能够轻松地为Spring MVC的Web项目自动构建出API文档了.如果您还不熟悉这块,可以先阅读: Spring Boo ...

  7. Java基础教程:IDEA单元测试

    Java基础教程:IDEA单元测试 环境配置 使用idea IDE 进行单元测试,首先需要安装JUnit 插件. 安装JUnit插件步骤 File-->settings-->Plguins ...

  8. 【计算机视觉】深度相机(六)--Kinect v2.0 手势样本库制作

    目录为1.如何使用Kinect Studio录制手势剪辑:2.如何使用Visual Gesture Builder创建手势项目:3.如何在我的C#程序中使用手势:4.关于录制.剪辑手势过程中的注意事项 ...

  9. Envoy 基础教程:使用 Unix Domain Socket(UDS) 与上游集群通信

    Envoy Proxy 在大多数情况下都是作为 Sidecar 与应用部署在同一网络环境中,每个应用只需要与 Envoy(localhost)交互,不需要知道其他服务的地址.然而这并不是 Envoy ...

随机推荐

  1. tr

    参照http://www.cnblogs.com/djcsch2001/archive/2011/05/08/2040255.html tr -options set1 [set2] ---- set ...

  2. Node.js入门:Hello World

    马上开始我们第一个Node.js应用:“Hello World”.打开你的编辑器,创建一个hello.js文件.编写代码保存该文件,并通过Node.js来执行. 控制台输出 1 console.log ...

  3. Linux运维之道(大量经典案例、问题分析,运维案头书,红帽推荐)

    Linux运维之道(大量经典案例.问题分析,运维案头书,红帽推荐) 丁明一 编   ISBN 978-7-121-21877-4 2014年1月出版 定价:69.00元 448页 16开 编辑推荐 1 ...

  4. fir.im Weekly - 这是一份强大的 SwiftGuide

    大新闻!Apple 10 亿美元融资滴滴!库克大叔对中国 iOS 开发者表达了高度认可,同时也传出 iOS 10 将内置滴滴 App 的消息.想像下,某个加班的深夜飙完代码,最性感的事情莫过于:「Si ...

  5. 每天一个linux命令(28):tar命令

    通过SSH访问服务器,难免会要用到压缩,解压缩,打包,解包等,这时候tar命令就是是必不可少的一个功能强大的工具.linux中最流行的tar是麻雀虽小,五脏俱全,功能强大. tar命令可以为linux ...

  6. Python下划线与命名规范

    Python下划线与命名规范 先看结论,节省只想知道答案你的宝贵时间: _xxx 不能用于from module import * 以单下划线开头的表示的是protected类型的变量.即保护类型只能 ...

  7. 【原创】NIO框架入门(四):Android与MINA2、Netty4的跨平台UDP双向通信实战

    概述 本文演示的是一个Android客户端程序,通过UDP协议与两个典型的NIO框架服务端,实现跨平台双向通信的完整Demo. 当前由于NIO框架的流行,使得开发大并发.高性能的互联网服务端成为可能. ...

  8. angularJS自定义那些事

    angularJS在数据处理方面很优秀. 使用angularJ给我感觉就像在写模板,然后对模板填入内容,只是这些内容不在是 在html页面编写,而是以数据的方式添加进去,这个也大大提高了编写的效率. ...

  9. javascript运算符——条件、逗号、赋值、()和void运算符

    × 目录 [1]条件 [2]逗号 [3]赋值[4]()[5]void 前面的话 javascript中运算符总共有46个,除了前面已经介绍过的算术运算符.关系运算符.位运算符.逻辑运算符之外,还有很多 ...

  10. javase基础复习攻略《五》

    总结完JAVA的基础语法和面向对象思想后,今天为大家补充一下JAVA中的数组,数组是什么呢?大家是不是想到了集合,数组和集合有相似之处,集合中的数据无序,不可以重复.数组中则存放着具有相同特征的一组数 ...