Kinect V2入门之数据获取步骤
阅读原文时间:2023年07月11日阅读:3

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

}

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章