Kinect V2 基础教程之彩色图像
本程序为自己所写,参考素材包括微软官方例子和外文资料,自己做了部分的优化。解释的如果有问题,恳请大家指正.
后台代码:
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 基础教程之彩色图像的更多相关文章
- Kinect v2控制鼠标原理分析和源码
https://blog.csdn.net/baolinq/article/details/54381284 此程序为利用Kinect v2实现用手指隔空控制鼠标,是我另一个项目的一部分,因为在另外那 ...
- 【翻译】Kinect v2程序设计(C++) Body 篇
Kinect SDK v2预览版的主要功能的使用介绍,基本上完成了.这次,是关于取得Body(人体姿势)方法的说明. 上一节,是使用Kinect SDK v2预览版从Kinect v2预览版取得B ...
- 【翻译】Kinect v2程序设计(C++) Color篇
Kinect SDK v2预览版,获取数据的基本流程的说明.以及取得Color图像的示例程序的介绍. 上一节,是关于当前型号Kinect for Windows(后面称作Kinect v1)和次世代型 ...
- C#基础教程/适合初学者
C#基础教程 第一章 C#语言基础 本章介绍C#语言的基础知识,希望具有C语言的读者能够基本掌握C#语言,并以此为基础,能够进一步学习用C#语言编写window应用程序和Web应用程序.当 ...
- SQL Server2012 T-SQL基础教程--读书笔记(5-7章)
SQL Server2012 T-SQL基础教程--读书笔记(5-7章) SqlServer T-SQL 示例数据库:点我 Chapter 05 表表达式 5.1 派生表 5.1.1 分配列别名 5. ...
- Spring Boot 2.x基础教程:Swagger静态文档的生成
前言 通过之前的两篇关于Swagger入门以及具体使用细节的介绍之后,我们已经能够轻松地为Spring MVC的Web项目自动构建出API文档了.如果您还不熟悉这块,可以先阅读: Spring Boo ...
- Java基础教程:IDEA单元测试
Java基础教程:IDEA单元测试 环境配置 使用idea IDE 进行单元测试,首先需要安装JUnit 插件. 安装JUnit插件步骤 File-->settings-->Plguins ...
- 【计算机视觉】深度相机(六)--Kinect v2.0 手势样本库制作
目录为1.如何使用Kinect Studio录制手势剪辑:2.如何使用Visual Gesture Builder创建手势项目:3.如何在我的C#程序中使用手势:4.关于录制.剪辑手势过程中的注意事项 ...
- Envoy 基础教程:使用 Unix Domain Socket(UDS) 与上游集群通信
Envoy Proxy 在大多数情况下都是作为 Sidecar 与应用部署在同一网络环境中,每个应用只需要与 Envoy(localhost)交互,不需要知道其他服务的地址.然而这并不是 Envoy ...
随机推荐
- osgi 1
Helloworld入门 准备: eclipse 3.4 需要jar,—— eclipse 自带的,plugin下面有很多,抛开里面的jar,很多都是当前项目不需要的,如果不适用eclipse而是直接 ...
- jQuery的extend方法的深层拷贝
一些东西长时间不用就忘了,比如这个jQuery的extend方法的深层拷贝,今天看单页应用的书的时候,看到entend第一个参数是true,都蒙了.也是,自己的大部分对jQuery的学习知识来自锋利的 ...
- table下属标签与标签中间不能加其他任何标签
今天设计网页,很想在table下面的caption下面加hr标签,不能正常解析,后来发现hr标签可以显示,但是用浏览器查看解析,发现hr在table上面进行了解析,不会再caption下面显示, 又连 ...
- 类的继承和多态性-编写Java应用程序,定义Animal类,此类中有动物的属性:名称 name,腿的数量legs,统计动物的数量 count;方法:设置动物腿数量的方法 void setLegs(),获得腿数量的方法 getLegs(),设置动物名称的方法 setKind(),获得动物名称的方法 getKind(),获得动物数量的方法 getCount()。定义Fish类,是Animal类的子类,
编写Java应用程序,定义Animal类,此类中有动物的属性:名称 name,腿的数量legs,统计动物的数量 count;方法:设置动物腿数量的方法 void setLegs(),获得腿数量的方法 ...
- javascript技术大全
这更像是一篇为自己而写的文章,没有过多的解释,sorray. 关于:return function fn(num){ var a = num; if(a>1){ a = num + 1; ret ...
- iis https 客户端证书
1.自建根证书 makecert -r -pe -n "CN=WebSSLTestRoot" -b 12/22/2013 -e 12/23/2024 -ss root -sr lo ...
- Dapper的基本使用
Dapper是.NET下一个micro的ORM,它和Entity Framework或Nhibnate不同,属于轻量级的,并且是半自动的.也就是说实体类都要自己写.它没有复杂的配置文件,一个单文件就可 ...
- MySQL ibdata1文件迁移
目的:主机系统/var目录快满了,经查询最大的文件是mysql的ibdata1文件,有17G大小,故需要迁移这个文件到其他目录下,以释放/var目录空间. 1.先备份下数据库是个好习惯 # mysql ...
- [New Portal]Windows Azure Virtual Machine (18) Azure Virtual Machine内部IP和外部IP
<Windows Azure Platform 系列文章目录> 在开始本章内容之前,请读者熟悉以下2篇博文: [New Portal]Windows Azure Virtual ...
- JS魔法堂:ASI(自动分号插入机制)和前置分号
一.前言 今晚在知乎看到百姓网前端技术专家——贺师俊对<JavaScript 语句后应该加分号么?>的回答,让我又一次看到大牛的风采,实在佩服万分.但单纯的敬佩是不足以回报他如此优秀的文字 ...