Kinect開發 2 景深資料獲取

2022-03-19 02:07:34 字數 2728 閱讀 1608

上一節講了openni2開發kinect的基本框架,但是,具體的資料流獲取並沒有詳細介紹,本篇文章開始介紹資料流的獲取與處理。採用opencv進行影象的處理與顯示。

獲取景深資料有2種方式,一種是輪詢,另外一種是設定乙個listener,當有新的資料幀到達時,會通知該listener。下面分別實現這兩種方式。    

先上**,注:為了更清晰的展示主要過程,對於一些錯誤及異常都沒有進行判斷,**寫的比較簡陋。

方式一:輪詢

1 #include 2

using

namespace

std;

34 #include 5

#pragma comment(lib, "openni2.lib")

67 #include 8 #include 9

#pragma comment(lib, "opencv_core244.lib")

10#pragma comment(lib, "opencv_highgui244.lib")

1112

intmain()

1338

if (!img)

3942

for (int row=0; row!=frame.getheight(); ++row)

4348

}49 img->imagedata =pimgdata;

50 cvshowimage("

wnd"

, img);

51char c = cvwaitkey(30

);52

if (c == 27)53

59}60}

61depthstream.stop();

62depthstream.destroy();

63device.close();

64openni::openni::shutdown();

65return0;

66 }

首先進行驅動、裝置的初始化,由於上一節中已經介紹過,不再進行贅述。

27:初始化乙個opencv的視窗,用於顯示處理之後的深度資料。

30:從videostream中讀取景深資料的資料幀。資料幀是openni::videoframeref型別,該物件儲存著本幀資料的寬高、時間戳、幀計數等資訊。

31:判斷該資料幀是否有效。

33:獲取到該幀的資料,注意,openni是用2個位元組來表示乙個景深資料,也就是depthpixel其實就是uint16_t型別。

34-41:根據該幀的資訊,分配opencv需要用到的結構。

42-48:這裡只是進行乙個簡單的處理,對每個深度資料取256的模,以便進行區分。

49-50:把處理後的資料在視窗中顯示出來。

方式二:事件

1 #include 2 #include 3

using

namespace

std;

45 #include 6

#pragma comment(lib, "openni2.lib")

78 #include 9 #include 10

#pragma comment(lib, "opencv_core244.lib")

11#pragma comment(lib, "opencv_highgui244.lib")

1213

class

newdepthframelistener

14 : public

openni::videostream::newframelistener15;

18 ~newdepthframelistener()

1925

if(m_pimgdata)

2630}31

32public:33

virtual

void onnewframe(openni::videostream&stream)

3444

if (!m_pimg)

4548

for (int row=0; row!=frame.getheight(); ++row)

4954

}55 m_pimg->imagedata =m_pimgdata;

56 cvshowimage("

wnd"

, m_pimg);

57frame.release();58}

59}6061

private:62

char*m_pimgdata;

63 iplimage*m_pimg;

64};

6566

intmain()

6790

}91 cvdestroywindow("

wnd"

);92

depthstream.stop();

93depthstream.destroy();

94device.close();

95openni::openni::shutdown();

96return0;

97 }

**比較簡單,就不再進行說明。

最後的效果如下圖:

demo 用kinect獲取訓練資料

雷打不動地設定一些東西 imaqhwinfo colorvid videoinput kinect 1 depthvid videoinput kinect 2 triggerconfig depthvid,manual triggerconfig colorvid,manual depthvid....

Kinect中多資料來源獲取和單資料來源獲取

在kinext發布的u3d中的案例中,可以分析出來 前面的步驟都應一樣,但是在建立reader的時候,申請的是乙個 reader sensor.openmultisourceframereader framesourcetypes.color framesourcetypes.depth 並且,fr...

Kinect獲取深度資料利用色彩展示

根據微軟資料顯示,kinect v2的深度幀資料為0.5m 8m,每一幀的大小為512 424 pixel 每一畫素點的深度值存放在乙個16位bit的ushort中。這裡的深度是指畫素點到kinect sensor平面的距離,網上有資料說資料的前13位表示距離,後3位表示使用者id,也有說12 4的...