zoukankan      html  css  js  c++  java
  • Kinect V2入门之数据获取步骤

    在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 }
  • 相关阅读:
    C# 操作Excel,使用EPPlus
    结构型设计模式之代理模式(Proxy)
    结构型设计模式之组合模式(Composite)
    结构型设计模式之桥接模式(Bridge)
    C#操作windows事件日志项
    C#操作XML序列化与反序列化
    日志组件Log4Net
    UI Automation 简介
    Selenium
    Selenium
  • 原文地址:https://www.cnblogs.com/mld-code-life/p/10891434.html
Copyright © 2011-2022 走看看