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 ...
随机推荐
- Dynamics CRM 2013 installation
原创地址:http://www.cnblogs.com/jfzhu/p/3445820.html 转载请注明出处 一 硬件要求 1. CRM Server 下表对硬件的要求是假定Microsoft S ...
- 与其他.Net异步模式和类型进行互操作
返回该系列目录<基于Task的异步模式--全面介绍> Tasks和异步编程模型APM(Tasks and the Asynchronous Programming Model) 从APM到 ...
- Java连接Oracle数据库开发银行管理系统【一、需求篇】
此系统开发共分为三篇完成. 第一篇[需求篇]:效果展示图,也就是需求部分的展示 第二篇[设计篇]:需求分析和类,接口的设计 第三篇[实现篇]:具体代码实现
- AFNetworking+Python+Flask+pyOpenSSL构建iOS HTTPS客户端&服务器端
对于HTTPS我在网上找了一堆资料看了下, 各种协议和证书已经有点晕了 最后我现有的感觉是, 在HTTP服务器上放一个证书, 在原本的HTTP访问之前客户端先检查证书是否正确 如果客户端证书检查正确, ...
- MVVM架构~knockoutjs实现简单的购物车
返回目录 概念相关 购物车相信大家都用过,很方便,可以将多个商品添加到购物车,并且可以修改购买商品的数据,当然为了用户体验好,在修改数据时,你的价格也会出现变化的,这使用JS可以实现,但我认为,代码量 ...
- 爱上MVC~在Views的多级文件夹~续~分部页的支持
回到目录 之前写的一篇文章,主要针对View视图,它可以放在N级目录下,不必须非要在views/controller/action这种关系了,而在程序运行过程中,发现分页视图对本功能并不支持,原因很简 ...
- java 线程协作 wait(等待)与 notiy(通知)
一.wait().notify()和notifyAll() 为了更好的支持多线程之间的协作,JDK提供了三个重要的本地方法 //调用某个对象的wait()方法能让当前线程阻塞,并且当前线程必须拥有此对 ...
- 百度地图 api
首先在百度开发者中心申请ak 在页面head中引用必要的css样式和js脚本 <script type="text/javascript" src="http:// ...
- 分享系列--面试JAVA架构师--链家网
本月7日去了一趟链家网面试,虽然没有面上,但仍有不少收获,在此做个简单的分享,当然了主要是分享给自己,让大家见笑了.因为这次是第一次面试JAVA网站架构师相关的职位,还是有些心虚的,毕竟之前大部分时间 ...
- 如何线程安全地遍历List:Vector、CopyOnWriteArrayList
遍历List的多种方式 在讲如何线程安全地遍历List之前,先看看通常我们遍历一个List会采用哪些方式. 方式一: for(int i = 0; i < list.size(); i++) { ...