在Kinect for windows SDK2.0中,获取并处理数据源接口步骤如下:

  Sensor -> Source -> Reader -> Frame -> Data

(一)Sensor
IKinectSensor *pSensor=nullptr;          //定义类指针
GetDefaultKinectSensor(&pSensor);  //捕获传感器
pSensor->Open();                                //调用类函数Open(),打开Kinect
(二)Source
IDepthFrameSource *pFrameSource=nullptr;
pSensor->get_DefrrmeSource(&pFrameSource); //get source 存放在pFrameSource中
(三)
IDepthFrameReader *pReader=nullptr ;            //Source是Kinect端拥有的,需要创建电脑端的接口Reader读取
pFrameSource->get_OpenReader(&pFrameSource);  //将pFrameSource中的数据读取到pReader中
(四)Frame
IDepthFrame *pFrame=nullptr ;                    //Frame是真正存储数据的类,每一次都让Reader把数据读到Frame类中
pFrameSource->AcquireLatestFrame(&pFrame) ;  //获取最新的数据,并且装入另一个数据帧里。但是这个函数必须要判断是否返回一个成功值,因为获取失败的几率非常高。
(五)处理数据

(如何从Frame类中获得数据,请求Source和创建Reader对于每一个数据类型都是一模一样的,但从Frame中提取信息则各有不同)
pFrame->AccessUnderlyingBuffer( &uBufferSize , &pBuffer)
//取到数据帧后,通过AccessUnderlyingBuffer()这个函数将数据复制到数组,这个函数有两个参数,
第一个是个记录大小的变量,第二个是个接受数据的数组指针,传入后会分别返回数组的大小以及数据。
它传入数组的数据代表的是那一个像素点上的物体距离传感器的位置。

读取深度信息 示例代码:

 #include<iostream>
#include"Kinect.h"
using namespace std; int main()
{
IKinectSensor *pSensor = nullptr; //1.get default Sensor
GetDefaultKinectSensor(&pSensor); pSensor->Open(); //open sensor IDepthFrameSource *pFrameSource = nullptr; //2.Get frame source
pSensor->get_DepthFrameSource(&pFrameSource); IDepthFrameReader* pFrameReader = nullptr;//3.get frame reader
pFrameSource->OpenReader(&pFrameReader); size_t uFrameCount = ;
while (uFrameCount < ) { // cirlce of 100 times
//4.get lastest frame
IDepthFrame *pFrame = nullptr; if (pFrameReader->AcquireLatestFrame(&pFrame) == S_OK) { int iWidth = , iHeight = ;
IFrameDescription *pFrameDescription = nullptr;
pFrame->get_FrameDescription(&pFrameDescription);
pFrameDescription->get_Width(&iWidth);
pFrameDescription->get_Height(&iHeight);
pFrameDescription->Release();
pFrameDescription = nullptr; //get image buffer
UINT uBufferSize = ;
UINT16* pBuffer = nullptr;
pFrame->AccessUnderlyingBuffer(&uBufferSize, &pBuffer); //output depth value
int x = iWidth / , y = iHeight / ;
size_t idx = x + iWidth * y;
cout << pBuffer[idx] << endl; pFrame->Release();
pFrame = nullptr; ++uFrameCount; }
} pFrameReader->Release();
pFrameReader = nullptr; // 2b. release Frame source
pFrameSource->Release();
pFrameSource = nullptr; // 1c. Close Sensor
pSensor->Close(); // 1d. Release Sensor
pSensor->Release();
pSensor = nullptr; return ;
}

Kinect V2入门之数据获取步骤的更多相关文章

  1. 【翻译】Kinect v2程序设计(C++) Color篇

    Kinect SDK v2预览版,获取数据的基本流程的说明.以及取得Color图像的示例程序的介绍. 上一节,是关于当前型号Kinect for Windows(后面称作Kinect v1)和次世代型 ...

  2. 【翻译】Kinect v1和Kinect v2的彻底比较

      本连载主要是比较Kinect for Windows的现行版(v1)和次世代型的开发者预览版(v2),以C++开发者为背景介绍进化的硬件和软件.本文主要是对传感的配置和运行条件进行彻底的比较.   ...

  3. 【计算机视觉】深度相机(五)--Kinect v2.0

    原文:http://blog.csdn.NET/qq1175421841/article/details/50412994 ----微软Build2012大会:Kinect for Windows P ...

  4. 【计算机视觉】深度相机(六)--Kinect v2.0 手势样本库制作

    目录为1.如何使用Kinect Studio录制手势剪辑:2.如何使用Visual Gesture Builder创建手势项目:3.如何在我的C#程序中使用手势:4.关于录制.剪辑手势过程中的注意事项 ...

  5. Kinect v2.0 for windows开发环境说明

    官方文档里是这些: Supported Operating Systems and Architectures The following operating systems and architec ...

  6. 【翻译】Kinect v2程序设计(C++-) AudioBeam篇

    Kinect v2,Microphone Array可以用来对于水平面音源方向的推测(AudioBeam)和语音识别(Speech Recognition).这一节是介绍如何取得AudioBeam. ...

  7. 【翻译】Kinect v2程序设计(C++) Body 篇

    Kinect SDK v2预览版的主要功能的使用介绍,基本上完成了.这次,是关于取得Body(人体姿势)方法的说明.   上一节,是使用Kinect SDK v2预览版从Kinect v2预览版取得B ...

  8. 【翻译】Kinect v2程序设计(C++) BodyIndex篇

    通过Kinect SDK v2预览版,取得BodyIndex(人体区域)的方法和示例代码. 上一节,介绍了从Kinect v2预览版用Kinect SDK v2预览版获取Depth数据的方法.   这 ...

  9. 【翻译】Kinect v2程序设计(C++) Depth编

    Kinect SDK v2预览版,取得Depth数据的方法说明. 上一节,介绍了通过使用Kinect for Windows SDK v2预览版(以下简称为,Kinect SDK v2预览版)从Kin ...

随机推荐

  1. Springboot(2.0.0.RELEASE)+spark(2.1.0)框架整合到jar包成功发布(原创)!!!

    一.前言 首先说明一下,这个框架的整合可能对大神来说十分容易,但是对我来说十分不易,踩了不少坑.虽然整合的时间不长,但是值得来纪念下!!!我个人开发工具比较喜欢IDEA,创建的springboot的j ...

  2. 【shell】awk的next用法

    awk的next相当于循环中continue的作用,next后面的语句将不再执行. 例如,下面的例子中,包含数字3的那行的print语句没有被执行. [root]$ seq | awk '{print ...

  3. 兄弟连教育分享-SQL性能优化十条经验

    1.查询的模糊匹配 尽量避免在一个复杂查询里面使用 LIKE '%parm1%'——红色标识位置的百分号会导致相关列的索引无法使用,最好不要用. 兄弟连教育分享-SQL性能优化十条经验 解决办法: 其 ...

  4. html button标签 语法

    html button标签 语法 button标签怎么用? 作用:定义一个按钮. 语法:<button type="button">按钮</button> ...

  5. IDEA使用一套代码启动多个应用

    在为公司开发一个消息中心,开发过程中需要模拟多个消费者.具体方式: 1.编辑应用配置 2.复制应用配置 3.重命名配置 4.修改端口,-Dserver.port=9991

  6. @清晰掉 c语言三"巨头" const:volatile:static

    const: 1.如果把const放在变量类型前,说明这个变量的值是保持不变的(即为常量),改变量必须在定义时初始化,初始化后对她的任何赋值都是非法的. 2.当指针或是引用指向一个常量时,必须在类型名 ...

  7. legend3---OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 10054

    legend3---OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 10054 一.总结 一句话总结: 解决方法:多试几次,实在不行就手动下载 1.homeste ...

  8. 提示标签title折行

    使用代码换行共两种代码,均可实现html标签内title内容显示时换行.换行代码符分别为:“ ”和“ ”以上符合数字输入均必须英文半角模式输入.使用时候,在需要换行地方任选一种(组)换行符号代码即可.

  9. C语言字符数组详解

    字符串的存储方式有字符数组和字符指针,我们先来看看字符数组. 因为字符串是由多个字符组成的序列,所以要想存储一个字符串,可以先把它拆成一个个字符,然后分别对这些字符进行存储,即通过字符数组存储.字符数 ...

  10. RequestMapping 注解的解析、匹配、注册

    RequestMapping 注解的解析.匹配.注册 1)创建 RequestMappingHandlerMapping 实例时会触发 afterPropertiesSet 调用. 2)读取容器中所有 ...