欧美精品亚洲精品日韩专区一乛方,VA在线看国产免费,欧美日老太太久久
當(dāng)前位置: 主頁 > 資訊 > 產(chǎn)品 >

Kinect for Windows SDK開發(fā)應(yīng)用

來源:互聯(lián)網(wǎng) 瀏覽數(shù):
責(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)。

image_thumb[3]

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:

21

當(dāng)然,由于Kinect SDK中包含基于.NET的程序集,除了WPF外,我們使用.NET WinForm或XNA框架都可以,目前還沒有人在Silverlight平臺上實驗成功。

第二步,添加Kinect程序集的引用

在Solution Explorer中,右鍵單擊KinectWpfDemo,在右鍵菜單中選擇“Add Reference…”。在彈出的對話框中,我們在.NET標(biāo)簽頁里,選擇“Microsoft.Research.Kinect”程序集。如下圖所示:

22


第三步,添加Coding4Fun Kinect Toolkit

這是一個可選項,不過為了之后的編程方便,建議大家添加一個。Coding4Fun Kinect Toolkit的下載地址:

http://c4fkinect.codeplex.com/

解壓縮后,一共有五個文件,針對WinForm、WPF平臺,還有一個Microsoft.Expression.Drawing.dll。我們通過Add Reference,將Coding4Fun.Kinect.Wpf.dll添加進(jìn)來。

23

獲取RGB Camera數(shù)據(jù)

第四步,添加控件

雙擊打開MainWindow.xaml,在設(shè)計器中添加兩個Image控件,一個用于顯示RGB圖像,另一個用于顯示Depth信息。

第五步,引用命名空間

打開MainWindow.xaml.cs文件,在文件頭部添加對于Kinect對象的引用:

using Microsoft.Research.Kinect.Nui;

using Microsoft.Research.Kinect.Audio;

using Coding4Fun.Kinect.Wpf;

回到MainWindow.xaml的設(shè)計器中,在屬性窗口中選擇Event,找到Loaded和Closed兩個方法,分別雙擊,添加兩個事件的處理函數(shù):

25

在MainWindow.xaml.cs文件的MainWindow類中,聲明Runtime的變量:

Runtime nui;

然后,在Loaded事件的處理函數(shù)中添加Runtime初始化的代碼:

private void Window_Loaded( object sender, RoutedEventArgs e)

{

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ù)的信息:

nui.VideoFrameReady += new EventHandler(nui_VideoFrameReady);

然后是事件處理函數(shù):

void nui_VideoFrameReady( object sender, ImageFrameReadyEventArgs e)

{

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ù):

nui.VideoStream.Open(ImageStreamType.Video, 2 , ImageResolution.Resolution640x480, ImageType.Color);

第一個參數(shù)是ImageStreamType,用來指定打開的設(shè)備流類型;第二個參數(shù)是PoolSize,指定緩沖區(qū)的數(shù)量,至少為2,保證一個 Buffer進(jìn)行繪制,另一個Buffer進(jìn)行數(shù)據(jù)填充;第三個參數(shù)指定Camera的分辨率;第四個參數(shù)則是獲取的圖片類型。

顯示效果如下圖所示:

24 - Copy

上面的示例代碼,沒有使用Coding4Fun的Helper類,如果使用的話,則代碼如下:

void nui_VideoFrameReady( object sender, ImageFrameReadyEventArgs e)

{

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.DepthFrameReady += new EventHandler(nui_DepthFrameReady);

nui.DepthStream.Open(ImageStreamType.Depth, 2 , ImageResolution.Resolution320x240, ImageType.Depth);

下面是事件處理函數(shù),在另外一個Image函數(shù)里,顯示Depth圖像:

void nui_DepthFrameReady( object sender, ImageFrameReadyEventArgs e)

{

image2.Source = e.ImageFrame.ToBitmapSource();

}

使用了Coding4Fun的Helper類。程序運行的效果如下:

24

總結(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/

免責(zé)聲明:本文僅代表作者個人觀點,與納金網(wǎng)無關(guān)。其原創(chuàng)性以及文中陳述文字和內(nèi)容未經(jīng)本站證實,對本文以及其中全部或者部分內(nèi)容、文字的真實性、完整性、及時性本站不作任何保證或承諾,請讀者僅作參考,并請自行核實相關(guān)內(nèi)容。



  • TAGS:kinect 入門 kinect 開發(fā) KinectSDK應(yīng)用
  • 網(wǎng)友評論

    您需要登錄后才可以發(fā)帖 登錄 | 立即注冊

    關(guān)閉

    全部評論:0條

    聯(lián)系方式

    服務(wù)熱線:15059788121 / 13489872927 / 15959158412

    換鏈Q(jìng)Q:943169942

    電子郵箱:943169942@qq.com

    聯(lián)系地址:福建省晉江國際工業(yè)設(shè)計園5號樓

    福建省信芯長盈科技有限公司 閩ICP備2021016425號-2/3

    Copyright www.594ljc.cn 2008-2025 All Rights Reserved

    開展“凈網(wǎng)2019"專項行動,堅決保障網(wǎng)絡(luò)空間清朗

    IOS版

    安卓版

    官網(wǎng)認(rèn)證