c++ - 在C++中使用kinect拾取2个手势

标签 c++ kinect

我正在尝试构建一个只接受来自 Kinect 的手部输入的程序

我需要获得 3 样东西, - kinect 深度视频的流式传输,上面有 OpenGL 输出数据 - 仅识别 2 个简单的手势,张开的手和握紧的拳头,我将构建一些函数来将其分解为每只手的 bool 形式 -左右手的位置,如果可以做2只手以上,那就太好了

基本上要在 kinect 中用手的张开和合拢 Action 进行点击和拖动鼠标操作,让我们从一只手开始,如果可以做两只以上的手,我稍后会学习。

根据我目前所读的内容,Kinect 无需任何额外的库即可轻松完成此操作,因此我应该能够仅使用 Kinect 库和 OpenGL 构建我的应用程序

我听说网上有很多这样的例子,但到目前为止我发现的都是 C#,而不是 C++,我程序的其他组件只用 C++,如果可能我想继续使用 C++。

最佳答案

本质上有两层:

  • 交互流(C++ 或托管)
  • 交互控件(仅限托管,特定于 WPF)

WPF 控件是根据交互流实现的。

如果您使用的是 WPF 以外的 UI 框架,则需要执行以下操作:

  • 实现“交互客户端”接口(interface)。这个界面有一个 单一方法,GetInteractionInfoAtLocation。这个方法将 由交互流重复调用,因为它跟踪用户的 手部 Action 。每次调用时,您有责任 返回“交互信息”(托管中的InteractionInfo, NUI_INTERACTION_INFO in C++)对于给定的用户、手和位置。 本质上,这就是交互流执行 HitTest 的方式 在用户界面中的控件上。
  • 创建一个交互流的实例,为它提供一个 引用您的交互客户端实现。
  • 启动 Kinect 传感器的深度和骨架流。
  • 对于传感器流产生的每个深度和骨架框架, 将帧的数据传递给适当的方法(ProcessDepth 或 ProcessSkeleton) 的交互流。作为交互流 处理来自传感器的输入帧,它将产生 供您的代码使用的交互框架。在 C++ 中,调用 交互流的 GetNextFrame 方法来检索每个这样的帧。 在托管代码中,您可以调用 OpenNextFrame,或订阅 InteractionFrameReady 事件。
  • 从每个交互框架中读取数据,找出用户想要什么 是在做。每一帧都有一个时间戳和一组用户信息 结构,每个结构都有一个用户跟踪 ID 和一个集合 手信息结构,它提供关于每只手的信息 位置、状态和抓握/松开抓握事件

您可以找到完整的示例 here .

关于c++ - 在C++中使用kinect拾取2个手势,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22418114/

相关文章:

c++ - 对类成员而不是 getter 的 Const 引用

c++ - 将初始值设定项列表与返回引用的用户定义转换运算符一起使用时复制返回值

c++ - 如何在 Windows 和 Visual Studio 2010 中安装 Openni?

memory - cvShowImage和Kinect SDK的内存问题:骨架查看器

C++ 需要有关 OpenCV 教程中代码的帮助

c++ - __syncthreads() 之后的 CUDA 竞赛检查危险

processing - 具有多个 Kinect 的点云

c# - 运动起点/终点检测

c++ - glBindMultiTexture 和 glEnableIndexed 的语义?