(转载请注明出处)

使用SDK: Kinect for Windows SDK v2.0 public preview1409

同前面,由于SDK未完毕,不附上函数/方法/接口的超链接。

这次最终是新的东西了。是“手势帧”,只是原名是“可视化手势构建器”(Visual Gesture Builder)帧,是

SDK 2.0自带的手势解决方式。只是,假设您认为微软写得不可靠。甚至垃圾。您能够尝试自己写个。笔者在

提供的范例中。写了个简单的样子(几十行而已,不要期望过大)。

好了,这个可视化手势构建器(后面简称手势),须要包括头文件

#include <Kinect.VisualGestureBuilder.h>

须要链接静态库

#pragma comment ( lib, "Kinect20.VisualGestureBuilder.lib" )

这部是可选的,您能够显式动态链接dll文件:"Kinect20.VisualGestureBuilder.dll",也能够

使用这个库文件隐式动态该文件,还须要原SDK中某vgbtechs目录以下的2个dll文件。

使用VS的生成事件就可以,请注意x64还是x86.

还有就是,这个手势数据库是由SDK2.0自带的工具生成的*.gbd文件。

这节不过说明怎么使用这个文件,至于怎么使用工具创建文件,应该是下节吧。谁知道

可能大家看过了SDK自带的“Visual Gesture Builder Viewer”了:

由于手势帧有点简单,我们就仿造这个做一个吧:

0. 支持随意窗体尺寸

我们之前的样例一直是固定窗体尺寸,这次能够改变窗体大小了,须要响应WM_SIZE消息

    为了方便地改变窗体,我们使用D2D 1.0中的D2D1HwndRenderTarget,由于自带了Resize方法.

1.加入图标,我们使用Kinect SDK自带的图标吧

复制app.ico到project下后,在project里面加入一个*.rc文件,右键,查看代码,不要编辑,毕竟Express版无法编辑。

写上

1 ICON "app.ico"

1代表编号    ICON代表类型     "app.ico"代表文件名称

这样编译,程序自己主动就会加入图标了。

接下来给程序加入图标:注冊窗体时

   wcex.hIcon = LoadIconW(hInstance, MAKEINTRESOURCEW(1));

    那个1就是之前rc文件填的编号。就可以

2.支持窗体文件拖拽:

先注冊可以进行文件拖拽: DragAcceptFiles(m_hwnd, TRUE);

之后再响应WM_DROPFILES消息就可以

3.新的花样

我们之前使用基于等待垂直同步的轮询模式,也使用了基于消息的事件模式.这次我们使用基于计时器的轮询模式。

一个SetTimer就可以,操作系统的时间片通常是20ms,所以我们就20ms的计时器吧,反正高于30FPS;

4. 渲染策略

在左边渲染彩色帧深度帧骨骼帧。简直就是把最前面几节的代码复制过来。

在右边可视化手势结果。

SDK 自带的手势解决方法中,手势分为两种:

离散手势连续手势

enum _GestureType
{
GestureType_None = 0,
GestureType_Discrete = 1,
GestureType_Continuous = 2
} ;

简单过程: (轻车熟路了, * 是可能须要动态改动的)

创建手势帧源(CreateVisualGestureBuilderFrameSource)

* 加入手势(IVisualGestureBuilderFrameSource::AddGesture(s))

* 删除手势(IVisualGestureBuilderFrameSource::RemoveGesture)

* 更换跟踪ID(IVisualGestureBuilderFrameSource::put_TrackingId)

打开读取器(IVisualGestureBuilderFrameSource::OpenReader)

轮询获取手势帧:(IVisualGestureBuilderFrameReader::CalculateAndAcquireLatestFrame)

获取对应结果

    IVisualGestureBuilderFrame::get_ContinuousGestureResult

    IVisualGestureBuilderFrame::get_DiscreteGestureResult

这两个方法,參数均是: 第一个想要获取结果的手势, 第二个是相应的结果。

从这个能够看出:

将两种手势分开储存能够降低方法调用,可是为了方便。这里就没有分类;

手势结果有:

连续型: 进度(float)

离散型: 结果(boolean), 置信度(float), 是否为首帧(boolean)

那么,问题来了!

游戏编程哪家强?

怎么获取手势呢?

CreateVisualGestureBuilderDatabaseInstanceFromFile

CreateVisualGestureBuilderDatabaseInstanceFromMemory

这两个能够获取手势数据库了,

    MIDL_INTERFACE("7FA8E82E-E43E-4DD6-A481-1E967DC4B7C8")
IVisualGestureBuilderDatabase : public IUnknown
{
public:
virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_AvailableGesturesCount(
/* [annotation][out][retval] */
_Out_ UINT *numGestures) = 0; virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_AvailableGestures(
/* [annotation][in] */
_In_ UINT32 capacity,
/* [annotation][size_is][out] */
_Out_writes_all_(capacity) IGesture **availableGestures) = 0; };

笔者都不用说了吧。

至于可视化算法,这并非重点。能够看看代码了解一下,写得比較乱.

只是这次的代码自己觉得还写得不错。建议大家细致看看

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZHVzdHBn/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

好了,这就是成果图了。彩色帧是黑色的,由于是关灯了。毕竟室友些睡觉了,像我这样的人真蛋疼。

支持文件拖拽。改变窗体大小。比微软自带的好用点。就临时取代微软坑爹的那个吧:

自己的电脑上关闭窗体。可是进程还未退出。微软您就慢慢坑吧

代码下载地址:点击这里
名字打错了,打成“面形”了,请不要在意这些细节

Kinect for Windows SDK v2.0 开发笔记 (十五) 手势帧的更多相关文章

  1. Kinect for Windows SDK 1.8的改进及新特性

    今年3月, 微软推出了Kinect for Windows SDK 1.7 更新,包括了手势识别 Kinect Interactions 和实时 3D 建模 Kinect Fusion 两项新技术. ...

  2. Kinect for Windows SDK开发学习相关资源

    Kinect for Windows SDK(K4W)将Kinect的体感操作带到了平常的应用学习中,提供了一种不同于传统的鼠标,键盘及触摸的无接触的交互方式,在某种程度上实现了自然交互界面的理想,即 ...

  3. Kinect for Windows SDK开发初体验(一)环境配置

    1.开发环境需求 (1).硬件需求 a.需要拥有双核,2.66GHz以上的CPU. b.显卡支持Microsoft DirectX 9.0c; c.2GB的内存 d.Kinect for Window ...

  4. Kinect for Windows SDK开发入门(一):开发环境配置

    [译]Kinect for Windows SDK开发入门(一):开发环境配置 前几天无意中看到微软发布了Kinect for windows sensor,进去看了一下Kinect应用的例子,发现K ...

  5. Kinect for Windows SDK开发入门(15):进阶指引 下

    Kinect for Windows SDK开发入门(十五):进阶指引 下 上一篇文章介绍了Kinect for Windows SDK进阶开发需要了解的一些内容,包括影像处理Coding4Fun K ...

  6. Kinect for Windows SDK开发入门(二):基础知识 上

    原文来自:http://www.cnblogs.com/yangecnu/archive/2012/03/31/KinectSDK_Application_Fundamentals_Part1.htm ...

  7. 【计算机视觉】深度相机(八)--OpenNI及与Kinect for windows SDK的比较

    OpenNI(开放自然交互)是一个多语言,跨平台的框架,它定义了编写应用程序,并利用其自然交互的API.OpenNI API由一组可用来编写通用自然交互应用的接口组成.OpenNI的主要目的是要形成一 ...

  8. 《ArcGIS Runtime SDK for Android开发笔记》

    开发笔记之基础教程 ArcGIS Runtime SDK for Android 各版本下载地址 <ArcGIS Runtime SDK for Android开发笔记>——(1).And ...

  9. OpenCV、PCL;Xtion、kinect;OpenNI、kinect for windows SDK比较

    一.对比介绍: 1. OpenCV:开源跨平台,OpenCV于1999年由Intel建立,如今由Willow Garage提供支持. 2. OpenNI:OpenNI组织创建于2010年11月.主要成 ...

随机推荐

  1. php 图片生成器

    一.需求 最近公司由于有大量的海报要做,而且海报的布局规模都是一样的,只是内容不同,所以老板想我开发一个图片的生成器.可以根据你输入的内容生成海报图片. 具体有需求有以下的需求 1.可以根据将每条数据 ...

  2. Cordova 开发环境搭建及创建第一个app

    整理记录使用cordova创建app应用程序并将其部署至Android系统移动设备上操作过程,具体如下: 一.前期安装环境 1. 安装JDK(java开发工具包) 2. 安装gradle 3. 安装A ...

  3. 5.17从零开始搭建springboot-dubbo的例子

    https://www.cnblogs.com/baijinqiang/p/10848259.html

  4. css属性代码大全总结(一)

    一 CSS文字属性: color : #999999; /*文字颜色*/ font-family : 宋体,sans-serif; /*文字字体*/ font-size : 9pt; /*文字大小*/ ...

  5. IIS日志分析:SC-Status语义

    在网站属性-网站-日志(属性) 中进行设定该站点IIS日志常规属性和扩展属性,扩展属性设置IIS日志包含字段显示. HTTP协议状态(sc-status)码的含义  IIS中 100 Continue ...

  6. c# 验证码实现代码

    using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Drawing2D ...

  7. 【转载】深入理解Java的接口和抽象类

    深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的 ...

  8. 开机进入GRUB不要慌,命令行也可启动Linux

    1. 首先利用ls命令,找到Ubuntu安装在哪个磁盘分区: 比如输入ls后我的机器列出的磁盘分区信息如下: (hd0),(hd1),(hd1,gpt3),(hd1,gpt2),(hd1,gpt1) ...

  9. javascript中创建新节点的方法 标签: javascript 2016-12-25 11:38 55人阅读 评论(0)

    一. var newnode=document.createElement("i"); var newnodeText=document.createTextNode(" ...

  10. 爬虫系列(五) re的基本使用

    1.简介 究竟什么是正则表达式 (Regular Expression) 呢?可以用下面的一句话简单概括: 正则表达式是一组特殊的 字符序列,由一些事先定义好的字符以及这些字符的组合形成,常常用于 匹 ...