Kinect for Windows SDK開發(fā)應(yīng)用
責(zé)任編輯:陳玉泳 時間:2013-07-12 08:27
[導(dǎo)讀]這一篇我們就要正式進(jìn)入Kinect的編程世界,首先介紹Kinect的整體結(jié)構(gòu)、開發(fā)環(huán)境。還有Kinect for Windows SDK開發(fā)應(yīng)用的初次體驗。
這一篇我們就要正式進(jìn)入Kinect的編程世界了,介紹我們?nèi)绾螐腃amera獲取圖像信息,先來介紹一下Kinect的整體結(jié)構(gòu)。
Kinect一共有三個Camera,其中中間的一個是RGB Camera,用來獲取640x480的彩色圖像,每秒鐘最多獲取30幀圖像;兩側(cè)是兩個景深(3D Depth)傳感器,用來檢測玩家的相對位置,原理和人眼立體成像是一樣的,不過這兩個傳感器使用的是紅外線。Kinect兩側(cè)是麥克風(fēng),下邊還有一個可移動底座,用來調(diào)整Kinect的仰角。
Kinect開發(fā)環(huán)境
今天我們主要是操作RGB Camera和Depth Sensor,首先,我們要完成Kinect開發(fā)環(huán)境的配置:
第一步,創(chuàng)建WPF工程
打開Visual Studio 2010,創(chuàng)建一個WPF工程,名叫KinectWpfDemo:
當(dāng)然,由于Kinect SDK中包含基于.NET的程序集,除了WPF外,我們使用.NET WinForm或XNA框架都可以,目前還沒有人在Silverlight平臺上實驗成功。
第二步,添加Kinect程序集的引用
在Solution Explorer中,右鍵單擊KinectWpfDemo,在右鍵菜單中選擇“Add Reference…”。在彈出的對話框中,我們在.NET標(biāo)簽頁里,選擇“Microsoft.Research.Kinect”程序集。如下圖所示:
第三步,添加Coding4Fun Kinect Toolkit
這是一個可選項,不過為了之后的編程方便,建議大家添加一個。Coding4Fun Kinect Toolkit的下載地址:
http://c4fkinect.codeplex.com/
解壓縮后,一共有五個文件,針對WinForm、WPF平臺,還有一個Microsoft.Expression.Drawing.dll。我們通過Add Reference,將Coding4Fun.Kinect.Wpf.dll添加進(jìn)來。
獲取RGB Camera數(shù)據(jù)
第四步,添加控件
雙擊打開MainWindow.xaml,在設(shè)計器中添加兩個Image控件,一個用于顯示RGB圖像,另一個用于顯示Depth信息。
第五步,引用命名空間
打開MainWindow.xaml.cs文件,在文件頭部添加對于Kinect對象的引用:
using Microsoft.Research.Kinect.Audio;
using Coding4Fun.Kinect.Wpf;
回到MainWindow.xaml的設(shè)計器中,在屬性窗口中選擇Event,找到Loaded和Closed兩個方法,分別雙擊,添加兩個事件的處理函數(shù):
在MainWindow.xaml.cs文件的MainWindow類中,聲明Runtime的變量:
Runtime nui;
然后,在Loaded事件的處理函數(shù)中添加Runtime初始化的代碼:
{
nui = new Runtime();
nui.Initialize(RuntimeOptions.UseColor| RuntimeOptions.UseDepth | RuntimeOptions.UseDepthAndPlayerIndex | RuntimeOptions.UseSkeletalTracking);
}
接下來是Closed事件中關(guān)閉Runtime的代碼:
private void Window_Closed( object sender, EventArgs e)
{
nui.Uninitialize();
}
Runtime對象是Kinect SDK中最主要的一個類,所有針對Kinect的操作都由Runtime類進(jìn)行了封裝。Runtime的構(gòu)造函數(shù)沒有接受任何參數(shù),但有一個顯式的初始化 函數(shù)Initialize,接受RuntimeOptions參數(shù),指定調(diào)用Kinect的哪些功能。其中 RuntimeOptions.UseColor表示使用RGB Camera,而RuntimeOptions.UseDepth則表示使用Depth傳感器。
初始化工作完成之后,我們要通過RGB Camera來獲取實時的圖像數(shù)據(jù)了。我們首先要聲明一個事件處理方法,來接收視頻數(shù)據(jù)的信息:
然后是事件處理函數(shù):
{
PlanarImage imageData = e.ImageFrame.Image;
image1.Source = BitmapSource.Create(imageData.Width, imageData.Height, 96 , 96 ,
PixelFormats.Bgr32, null , imageData.Bits, imageData.Width * imageData.BytesPerPixel);
// image1.Source = e.ImageFrame.ToBitmapSource();
}
提示:Getting Started上提供的Sample Code有誤,需要將最后一個參數(shù)中的data.Width改為imageData.Width才可以正常運行。
VideoFrameReady事件會傳遞一個ImageFrameReadyEventArgs參數(shù)給事件處理函數(shù),其中的ImageFrame會包 含關(guān)于圖片的各種信息,比如Type變量指定了圖像是來自RGB還是Depth,Resolution變量指定了分辨率,而Image中以byte[]數(shù) 組的方式保存了圖像的真實數(shù)據(jù)。
然后的工作就是根據(jù)PlanarImage中包括的數(shù)據(jù)來創(chuàng)建一個Bitmap對象,然后將其傳遞給Image控件,顯示到WPF程序的界面上。
最后,我們還要在構(gòu)造函數(shù)里打開視頻流,來獲取視頻數(shù)據(jù):
第一個參數(shù)是ImageStreamType,用來指定打開的設(shè)備流類型;第二個參數(shù)是PoolSize,指定緩沖區(qū)的數(shù)量,至少為2,保證一個 Buffer進(jìn)行繪制,另一個Buffer進(jìn)行數(shù)據(jù)填充;第三個參數(shù)指定Camera的分辨率;第四個參數(shù)則是獲取的圖片類型。
顯示效果如下圖所示:
上面的示例代碼,沒有使用Coding4Fun的Helper類,如果使用的話,則代碼如下:
{
image1.Source = e.ImageFrame.ToBitmapSource();
e.ImageFrame.ToBitmapSource().Save( " catpure.jpg " , ImageFormat.Jpeg);
}
Helper類使用了C#的Extension Methods,為ImageFrame增加了一些轉(zhuǎn)換方法。我們還可以將圖像保存為文件,考慮到文件系統(tǒng)存儲的效率文件,建議大家不用每張都存。
獲取Depth信息
接下來我們要獲取Depth信息了,過程與RGB Camera類似。首先要確保Runtime對象被初始化時,已經(jīng)添加了RuntimeOptions.UseDepth的屬性,否則設(shè)備無法正常打開。
然后,添加獲取Depth數(shù)據(jù)的事件處理,并打開Depth的數(shù)據(jù)流,這次的分辨率是320x240:
nui.DepthStream.Open(ImageStreamType.Depth, 2 , ImageResolution.Resolution320x240, ImageType.Depth);
下面是事件處理函數(shù),在另外一個Image函數(shù)里,顯示Depth圖像:
{
image2.Source = e.ImageFrame.ToBitmapSource();
}
使用了Coding4Fun的Helper類。程序運行的效果如下:
總結(jié):在前面的介紹中我們首先了解了Kinect傳感器整體結(jié)構(gòu)、Kinect開發(fā)環(huán)境的配置、添加Coding4Fun Kinect Toolkit、從RGB Camera和Depth Sensor中獲取了圖像信息。上面的描述很詳盡,這既是Kinect for Windows SDK開發(fā)應(yīng)用的初次體驗。(更多kinect資訊請繼續(xù)關(guān)注納金網(wǎng)http://www.594ljc.cn/)
- 分享到:
- 2020綠賽卡頂墻應(yīng)用設(shè)2020年01月03日
- 創(chuàng)意征集,第四屆“2020年01月03日
- 3D打印與學(xué)前兒童音樂2019年07月23日
- Relativity正在密西西比2019年06月13日
- 優(yōu)銳科技聯(lián)合未知大2019年06月13日
- 第二屆中華設(shè)計獎終2019年04月10日
- 聯(lián)泰科技全新推出一2019年03月04日
- 3D Systems正式銷售民用2019年03月01日
- 2019年TCT亞洲展:銳力2019年02月21日
- 2019伊犁禮物征集大賽2019年02月19日