Kinect for Windows SDK開發入門(十四)進階指引 上

來源:互聯網
上載者:User

前面十三篇文章介紹了Kinect SDK開發中的各個方面的最基礎的知識。正如本系列博聞標題那樣,這些知識只是Kinect for windows SDK開發的入門知識。本文將會介紹Kinect進階開發需要瞭解一些知識(beyond the basic)。

讀者可能會注意到,在學習了前面十三篇文章中關於Kinect開發的方方面面,如影像資料流、景深攝像機、骨骼追蹤、麥克風陣列、語音辨識等這些知識後,離開發出一些我們在網上看到的那些具有良好使用者體驗的Kinect應用程式還是顯得捉襟見肘。Kinect SDK在某種意義上只是提供了一些其它Kinect類庫的相同或者更好的功能。為了進一步提高Kinect for Windows應用程式的應用體驗,我們需要瞭解一些其他的和Kinect有關的開發技術和類庫。Kinect的真正應用潛力是和其他技術進行整合。

本文將會介紹一些第三方類庫如何來協助處理Kinect感應器提供的資料。使用不同的技術進行Kinect開發,可以發掘出Kinect應用的強大功能。另一方面如果不使用這些為了特定處理目的而開發的一些類庫,而是自己實現這些邏輯的話,代碼可能會比較混亂和不穩定。本文只是簡單的介紹這些第三方類庫並給以適當的引導。Kinect開發最大的困難不是什麼技術,而是知道什麼樣技術能夠被用到Kinect開發中。一旦瞭解了什麼技術能夠使用,Kinect可能開發的應用就會出現巨大的潛力。

本文中介紹的一些技術可能覆蓋面不夠廣,有可能有些類庫很重要但是本文沒有涉及到,Kinect開發方面的技術變化的非常快,這一點也難以避免,歡迎大家能夠補充。但是通過介紹一些基本的協助類庫,影像處理類庫等,希望大家瞭解到這些技術的重要性以及對Kinect開發的作用。可能隨著技術的發展,這些類庫可能有些變化,但是相關的技術領域相信還是一樣的,本文只是起到一個拋磚引玉的作用。

本文及下篇文章將會介紹幾個有用的工具及類庫,包括Coding4Fun Kinect Toolkit,Emgu(OpenCV電腦視覺庫的C#版本)和Blender。只是非常簡單的介紹了Unity 3D遊戲架構,FAAST手勢識別中介軟體以及Microsoft Robotics Developer Studio。這些知識如果大家感興趣的話可能要花一定的精力去瞭解和掌握,這裡只是簡單介紹。

1. 影像處理協助類

有很多影像處理相關的類庫可以使用。單單在.NET Framework中,就有PresentationCore.dll中的System.Windows.Media.Drawing抽象類別以及System.Drawing.dll中System.Drawing命名空間下的類可以使用。更複雜的是,在System.Windows和System.Drawing命名空間下有一些相互獨立的處理形狀(shape)和顏色(color)的類。有時候一個類庫中的方法能夠進行一些影像處理而其它類庫中卻沒有類似的方法。為了方便,各種繪圖物件之間的轉換顯得很有必要。

當引入Kinect後,情況變得更加複雜。Kinect有自己的影像資料流,如ImageFrame。為了能夠使Kinect這些專有的影像對象能夠和WPF一同使用,ImageFrame對象必須轉換為ImageSource類型,該對象在System.Windows.Media.Imaging命名空間中。第三方影像處理庫並不知道System.Windows.Media命名空間中的對象,但是知道System.Drawing命名空間,為了能夠使用Emgu處理Kinect中產生的資料,需要將Microsoft.Kinect中的某些資料類型轉化為System.Drawing類型,然後將System.Drawing類型轉換到Emgu中的類型,在Emgu中處理完之後,再轉換回System.Drawing類型,最後再轉換為System.Windows.Media類型來共WPF使用。

1.1 Coding4Fun Kinect工具類

Coding4Fun Kinect Toolkit為將一些類型從一種類庫轉換到其他類庫中的對應類型的提供了一些便利。這個工具集可以從該開源工具集官網 http://c4fkinect.codeplex.com/ 上下載。它包括3個獨立的dll。其中Coding4Fun.Kinect.Wpf.dll提供了一系列擴充方法來在Microsoft.Kinect和System.Windows.Media之間進行轉換。而Coding4Fun.Kinect.WinForm.dll提供了一系列擴充方法來在Microsoft.Kinect和System.Drawing之間進行轉換。System.Drawing是.NET圖形庫中的dll。他包含了WinForm中用來進行繪圖和展現所需的元素,而WPF中所需要的展現元素包含在System.Windows.Media中。

遺憾的是Coding4Fun Kinect Toolkit並沒有提供在System.Drawing命名空間和System.Windows.Media命名空間之間對應對象的轉換方法。這是因為Toolkit的最初目的是方便簡單的編寫Kinect Demo程式而不是提供一個通用的在不同的映像類型之間進行轉換的類庫。所以,一些可能在WPF中要用到的方法可能存在於WinForm的dll中。一些非常有用的,複雜的處理景深資料流中景深影像資料的方法被封裝到了一些簡單的將Kinect映像類型轉換為WPF ImageSource的對象中去了。

但是Coding4Fun Kinect ToolKit有兩個比較好的地方可以取消上面的疑慮。一個就是,他是開源的,原始碼可以下載並查看。可以通過源碼查看Coding4Fun團隊是如何在影像處理內部使用位元組數組的。你可以在這些代碼中看到前面博文中代碼的影子,類庫中的一些小的技巧非常有協助。第二就是這些方法都是擴充方法,可以很方便的進行擴充。

擴充方法是一種文法糖,它使得一個獨立的方法看起來像是被附加到一個類型上一樣。比如,有一個方法AddOne可以將當前的值加1。這個方法可以改寫為一個擴充方法。只需要簡單的將該方法設定為靜態,並在Int32類型前加this即可。代碼如下, 然後調用AddOne(3)這個方法可以簡單的改寫為3. AddOne()

public int AddOne(int i){    return i + 1;}public static class myExtensions{    public static int AddOne(this int i)    {        return i + 1;    }}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.