1. 程式人生 > >Kinect V2開發(2)從Kinect獲取資料

Kinect V2開發(2)從Kinect獲取資料

在Kinect for windows SDK2.0中,Kinect有多種型別的資料來源,每個型別的資料都有三個類與之對應:Source,Reader和Frame。要讀取骨架,就有IBodyFrameSource, IBodyFrameReader, IBodyFrame這三個類,要讀取深度資料,就有IDepthFrameSource, IDepthFrameReader, IDepthFrame這三個類,以此類推其他的如Body Index,Infrared,Color資料也是這樣命名的。

在Kinect for windows SDK2.0中,獲取並處理資料來源介面步驟如下:
Sensor -> Source -> Reader -> Frame -> Data

1.Sensor

GetDefaultKinectSensor()

這個函式用來獲取預設的感應器,括號裡填自己的預設名字就可以,然後就可以設定感測器的狀態。
eg:

GetDefaultKinectSensor(&IKinectSensor);  //獲取感應器
IKinectSensor->Open();            //開啟感應器

2.Source
在IKinectSensor下,有這樣一些函式成員,通過呼叫它們,可以獲取相應的資料。這裡寫圖片描述
IKinectSensor (對應到感應器)
get_DepthFrameSource() -> IDepthFrameSource (深度影象來源)
get_ColorFrameSource() -> IColorFrameSource (彩色影象來源)
get_InfraredFrameSource() -> IInfraredFrameSource (紅外影象來源)
get_AudioSource() -> IAudioSource (聲音來源)
get_BodyFrameSource() -> IBodyFrameSource (人體骨架資訊來源)
get_BodyIndexFrameSource() -> IBodyIndexFrameSource (人體在深度影象中的位置資訊來源)
……
以source結尾的,都是資料的來源,我們並不能直接使用這些資料,需要通過另外的函式讀取。
3.Reader
通過 OpenReader()’ 這樣一個函式,我們可以取得對應的 ’ Frame Reader’ 來讀取資料
這裡寫圖片描述


以IColorFrameSource為例,我們可以通過OpenReader()函式取得IColorFrameReader,並通過它來讀取資料。

4.Data
通過AcquireLatestFrame(),我們可以獲取最新的資料,並且裝入另一個數據幀裡,但是這個函式必須要判斷是否返回一個成功值,因為獲取失敗的機率非常高。
這裡寫圖片描述
以IColorFrameReader為例,獲取到的最新資料儲存至IColorFrame中

5.資料處理
讀取到資料幀後,我們通過AccessUnderlyingBuffer()這個函式將資料複製到陣列,這個函式有兩個引數,第一個是個記錄大小的變數,第二個是個接受資料的陣列指標,傳入後會分別返回陣列的大小以及資料。它傳入陣列的資料代表的是那一個畫素點上的物體距離感測器的位置。
這裡寫圖片描述


我們也可以通過get_FrameDescription()描述彩色資料幀的具體資訊
這裡寫圖片描述
總結來說,流程如下

  • GetDefaultKinectSensor() → IKinectSensor
  • get_ColorFrameSource() → IColorFrameSource
  • OpenReader() → IColorFrameReader
  • AcquireLatestFrame() → IColorFrame

獲取到資料之後就可以進行後續的資料處理啦~