c/c++语言开发共享Kinect V2入门之数据获取步骤

在Kinect for windows SDK2.0中,获取并处理数据源接口步骤如下: Sensor -> Source -> Reader -> Frame -> Data (一)SensorIKinectSensor *pSensor=nullptr; //定义类指针GetDefaultKine …

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

 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/603425.html

(0)
上一篇 2021年5月11日
下一篇 2021年5月11日

精彩推荐