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

后台代码:

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. 让C#轻松实现读写锁分离--封装ReaderWriterLockSlim

    ReaderWriterLockSlim 类 表示用于管理资源访问的锁定状态,可实现多线程读取或进行独占式写入访问. 使用 ReaderWriterLockSlim 来保护由多个线程读取但每次只采用一 ...

  2. Java枚举类型getClass和getDeclaringClass区别(未完待续)

    Java中的枚举类型有getClass()和getDeclaringClass()两个方法,在通常情况下这两个方法返回的类型一样,在某些场景下会有不同的表现 参照 http://stackoverfl ...

  3. Node.js与Sails~中间查询语言Waterline

    回到目录 上讲主要说了如何配置sails的持久化机制,这讲主要说一下实现持久化时的增删改查的语法,在sails里使用了和mongodb风格类似的waterline查询语言,使用简单,语法生动,下面我们 ...

  4. ssh文件传输命令:sz与rz命令

    内容概要: rz 上传文件到linux服务器,会出现选择框 sz filename 下载linux文件到windows 一般来说,linux服务器大多是通过ssh客户端来进行远程的登陆和管理的,使用s ...

  5. Atitit 图像处理30大经典算法attilax总结

    Atitit 图像处理30大经典算法attilax总结 1. 识别模糊图片算法2 2. 相似度识别算法(ahash,phash,dhash)2 3. 分辨率太小图片2 4. 横条薯条广告2 5. 图像 ...

  6. WPF入门教程系列三——Application介绍(续)

    接上文WPF入门教程系列二——Application介绍,我们继续来学习Application 三.WPF应用程序的关闭 WPF应用程序的关闭只有在应用程序的 Shutdown 方法被调用时,应用程序 ...

  7. angularjs的resource实例对象

    angularjs的resource实例对象 我们看看都有啥 而直接使用service对象的时候没有前面这些$

  8. Java基础-继承-编写一个Java应用程序,设计一个汽车类Vehicle,包含的属性有车轮个数 wheels和车重weight。小车类Car是Vehicle的子类,其中包含的属性有载人数 loader。卡车类Truck是Car类的子类,其中包含的属性有载重量payload。每个 类都有构造方法和输出相关数据的方法。最后,写一个测试类来测试这些类的功 能。

    #29.编写一个Java应用程序,设计一个汽车类Vehicle,包含的属性有车轮个数 wheels和车重weight.小车类Car是Vehicle的子类,其中包含的属性有载人数 loader.卡车类T ...

  9. JavaScript 模板引擎实现原理解析

    1.入门实例 首先我们来看一个简单模板: <script type="template" id="template"> <h2> < ...

  10. Git Sophisticated Commands

    Compare two branches: branch_1 and branch_2: git diff branch_1…branch_2 Merge specified files of one ...