日期:2014-05-17 浏览次数:20891 次
本文首先用一个例子展示骨骼追踪系统涉及的主要对象,然后在此基础上详细讨论骨骼追踪中所涉及的对象模型。
本节将会创建一个应用来将获取到的骨骼数据绘制到UI界面上来。在开始编码前,首先来看看一些基本的对象以及如何从这些对象中如何获取骨骼数据。在进行数据处理之前了解数据的格式也很有必要。这个例子很简单明了,只需要骨骼数据对象然后将获取到的数据绘制出来。
彩色影像数据,景深数据分别来自ColorImageSteam和DepthImageStream,同样地,骨骼数据来自SkeletonStream。访问骨骼数据和访问彩色影像数据、景深数据一样,也有事件模式和 “拉”模式两种方式。在本例中我们采用基于事件的方式,因为这种方式简单,代码量少,并且是一种很普通基本的方法。KinectSensor对象有一个名为SkeletonFrameReady事件。当SkeletonStream中有新的骨骼数据产生时就会触发该事件。通过AllFramesReady事件也可以获取骨骼数据。在下一节中,我们将会详细讨论骨骼追踪对象模型,现在我们只展示如何从SkeletonStream流中获取骨骼数据。SkeletonStream产生的每一帧数据都是一个骨骼对象集合。每一个骨骼对象包含有描述骨骼位置以及骨骼关节的数据。每一个关节有一个唯一标示符如头(head)、肩(shoulder)、肘(dlbow)等信息和3D向量数据。
现在来写代码。首先创建一个新的wpf工程文件,添加Microsoft.Kinect.dll。添加基本查找和初始化传感器的代码,这些代码参考之前的文章。在开始启动传感器之前,初始化SkeletonStream数据流,并注册KinectSensor对象的SkeletonFrameReady事件,这个例子没有使用彩色摄像机和红外摄像机产生的数据,所以不需要初始化这些数据流。UI界面采用默认的,将Grid的名称改为LayoutRoot,之后就再Grid里面绘制。代码如下:
<Window x:Class="KinectSkeletonTracking.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525"> <Grid x:Name="LayoutRoot" Background="White"> </Grid> </Window>
后台逻辑代码如下: