在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 ;
}

最新文章

  1. iOS 地图定位及大头针的基本使用
  2. 一个简单的TabItem样式。
  3. 详解css中的position属性
  4. C#如何根据配置实现动态窗体
  5. SQL获取本周销售总数
  6. 几种在Linux下查询外网IP的办法
  7. 用Maven插件生成Mybatis代码/数据库
  8. [ASP.NET]ASP.NET数据绑定菜单控件
  9. css 权威指南笔记( 五)结构和层叠之三种样式来源
  10. Shell入门第一课
  11. 1数组的join方法
  12. Prime Path (poj 3126 bfs)
  13. Cracking the Coding Interview 第一章
  14. Sublime Text 3下载-汉化-插件配置
  15. hdu3652 数位dp记忆化搜索
  16. SQL注入的优化和绕过
  17. hdu 2119(简单二分图) Matrix
  18. Python 文件 truncate() 方法
  19. 菜鸟学Java(九)——Servlet的基本配置
  20. Springmvc配置文件application.xml 和 spring-servlet.xml

热门文章

  1. JDBC接口封装
  2. TF-epoch、 iteration和batchsize区别(转载)
  3. 微信公众号发送告警Python脚本
  4. 什么是工作流java Activity
  5. java大文件上传
  6. Spring Cloud Stream教程(三)持续发布 - 订阅支持
  7. 启动Maven项目时报错Failed to execute goal org.apache.maven.plugins:maven-clean-plugin:2.5:clean (default-clean) on project **-web: Failed to clean project: Failed to delete E:\**\target\tomcat\logs\access_lo
  8. (转)openssl 命令: openssl req 命令详解
  9. IE与safari浏览器中时间格式问题
  10. Json C#解析