Kinect V2入门之数据获取步骤

2019-05-22 06:27:36来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

在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
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:40.QT-QPropertyAnimationdong动画类使用

下一篇:C++中的函数重载分析(一)