Kinect V2入门之数据获取步骤
2019-05-22 06:27:36来源:博客园 阅读 ()
在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()这个函数将数据复制到数组,这个函数有两个参数,
第一个是个记录大小的变量,第二个是个接受数据的数组指针,传入后会分别返回数组的大小以及数据。
它传入数组的数据代表的是那一个像素点上的物体距离传感器的位置。
读取深度信息 示例代码:
1 #include<iostream> 2 #include"Kinect.h" 3 using namespace std; 4 5 int main() 6 { 7 IKinectSensor *pSensor = nullptr; //1.get default Sensor 8 GetDefaultKinectSensor(&pSensor); 9 10 pSensor->Open(); //open sensor 11 12 IDepthFrameSource *pFrameSource = nullptr; //2.Get frame source 13 pSensor->get_DepthFrameSource(&pFrameSource); 14 15 IDepthFrameReader* pFrameReader = nullptr;//3.get frame reader 16 pFrameSource->OpenReader(&pFrameReader); 17 18 size_t uFrameCount = 0; 19 while (uFrameCount < 100) { // cirlce of 100 times 20 //4.get lastest frame 21 IDepthFrame *pFrame = nullptr; 22 23 if (pFrameReader->AcquireLatestFrame(&pFrame) == S_OK) { 24 25 int iWidth = 0, iHeight = 0; 26 IFrameDescription *pFrameDescription = nullptr; 27 pFrame->get_FrameDescription(&pFrameDescription); 28 pFrameDescription->get_Width(&iWidth); 29 pFrameDescription->get_Height(&iHeight); 30 pFrameDescription->Release(); 31 pFrameDescription = nullptr; 32 33 //get image buffer 34 UINT uBufferSize = 0; 35 UINT16* pBuffer = nullptr; 36 pFrame->AccessUnderlyingBuffer(&uBufferSize, &pBuffer); 37 38 //output depth value 39 int x = iWidth / 2, y = iHeight / 2; 40 size_t idx = x + iWidth * y; 41 cout << pBuffer[idx] << endl; 42 43 pFrame->Release(); 44 pFrame = nullptr; 45 46 ++uFrameCount; 47 48 } 49 } 50 51 pFrameReader->Release(); 52 pFrameReader = nullptr; 53 54 // 2b. release Frame source 55 pFrameSource->Release(); 56 pFrameSource = nullptr; 57 58 // 1c. Close Sensor 59 pSensor->Close(); 60 61 // 1d. Release Sensor 62 pSensor->Release(); 63 pSensor = nullptr; 64 65 return 0; 66 }
原文链接:https://www.cnblogs.com/mld-code-life/p/10891434.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 关于各种不同开发语言之间数据加密方法(DES,RSA等)的互通的 2020-06-07
- C++ 共用体 2020-06-05
- 数据结构—链表 2020-05-29
- Qt做Tcp数据传输 2020-05-26
- 图 2020-05-02
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash