上一節講了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的...