(转载请注明出处)

使用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. html中canvas渲染图片,并转化成base64格式保存

    最近在做一个上传头像然后保存显示的功能,因为涉及到裁剪大小和尺寸比例,所以直接上传图片再展示的话,就会出现问题,所以就想用canvas来渲染裁剪后的图片,然后转化成base64格式的图片再存储,这样取 ...

  2. js基础---字符串方法

    // var str1="xudandan"; // 字符串长度 var str1_length=str1.length;console.log(str1);console.log ...

  3. Android Studio and Gradle安装心得

    安装基于Eclipse 的ADT一段时间,感觉确实有很多功能不足,通过网上资料,决定改向AS. AS下载了最新的2.3版本,它不分64位与32位,网上说有单独版是瞎扯蛋.只要启动不同的EXE就行了. ...

  4. 在命令提示符窗口下(cmd)使用指令操作并编译java代码,运行java编译代码

    使用cmd操作java代码,编译.java文件,运行.class文件. 操作步骤: 1:创建一个文件夹: 例如:在e盘根目录(\)下面创建一个名为Hello的文件夹: 使用md指令:如图 在e盘中会生 ...

  5. java就业前景发展方向分析

    随着信息化的发展,IT培训受倒了越来越多人的追捧.在开发领域,JAVA培训成为了许多人的首选!java拥有强大的开发者的数量已超过了之前的900万,将近97%的企业电脑也在运行着java,其下载量每年 ...

  6. 关于python学习路线

    *Python进阶(目录/书籍/学习路线) 忘了从哪里转的了,没办法标记哦,实在不好意思... 目录:) 1. 简介&helloworld&开发环境配置 2.基本语法:标识符& ...

  7. js 获取属性名称,再根据这个属性名获取值

    if (result.success) { var obj = JSON.parse(result.data); var sltObj = document.getElementById(" ...

  8. jsp 多条件组合查询

    web层: public String query(HttpServletRequest request, HttpServletResponse response) throws ServletEx ...

  9. js数组操作find查找特定值结合es6特性

    js数组操作find查找特定值结合es6特性

  10. PAT_A1153#Decode Registration Card of PAT

    Source: PAT A1153 Decode Registration Card of PAT (25 分) Description: A registration card number of ...