[EmguCV/KinectSDK] WPF使用EmguCV讀取KinectSDK做影像處理

  • 11119
  • 0
  • C#
  • 2014-03-26

EmguCV可以想成是C#版的OpenCV,所以換句話說等於是,你可以在C#程式語言上使用的電腦視覺Open Source API 開發相關的影像處理操作或一些影像物件辨識、追蹤等需求。

因此有許多人可能會使用EmguCV來取得從KinectSDK取得的影像來做後面的處理

前言

 


 

EmguCV可以想成是C#版的OpenCV,所以換句話說等於是,你可以在C#程式語言上使用的電腦視覺Open Source API 開發相關的影像處理操作或一些影像物件辨識、追蹤等需求。

 

隨著Kinect具備的紅外線感應器所帶來的深度資訊,讓影像處理、電腦視覺這塊領域上有了更重大的進展、透過深度這個資訊,除了可以讓我們在識別時,有了新的訊息協助判斷影像中所需要的目標物,也可以減少過往為了能夠識別出物體而加入的要花費效能上的演法,並且Kinect也價格已非常平易近人。

 

因此有許多人可能會使用EmguCV來取得從KinectSDK取得的影像來做後面的處理

而此篇就是要協助,如何透過EmguCV取得KinectSDK的影像資訊。

 

步驟

 


 

在這邊我以EmguCV 2.4.0與KinectSDK 1.5版為例

1﹒安裝好KinectSDK與EmguCV

並且確保兩個部分分別都可以開發執行

 

2﹒使用以下兩個.cs檔案 ImageExtemsion.cs與EmguImageExtension.cs檔案

(之前也是遇到此問題,後來 發現網路上有提供)

ImageExtemsion.cs:提供一些靜態方法,協助你可以把Kinect SDK的深度影像與彩色影像轉換成WPF的Bitmap或BitmapSource類別儲存影像資訊

 

EmguImageExtension.cs:裡面會用到ImageExtemsion.cs檔案中的方法,把KinectSDK的彩色影像轉換成EmguCV的格式

 

以上兩個檔案建議可以閱讀一下了解它的使用方法。

 

3﹒在專案中的參考,如果沒有System.Drawing dll請記得要加入,上述兩個檔案會使用到

dll

 

4﹒在你要編寫的檔案中加入


using ImageManipulationExtensionMethods;

 

5﹒編寫拿取影像的程式碼

在拿取影像的事件中透過擴充方法,可以把ColorImageFrame的物件轉換成Image<Bgr,Byte>這個可以吃EmguCV的資料格式

如下範例:


private void sensor_ColorFrameReady(object sender, ColorImageFrameReadyEventArgs e)
        {
            using (ColorImageFrame colorFrame = e.OpenColorImageFrame())
            {
                if (colorFrame != null)
                {
                    colorFrame.CopyPixelDataTo(colorPixels);
                    //轉型成EMGU用
                    Image<bgr,byte> convertImage = colorFrame.ToOpenCVImage<bgr,byte>();
                    Image<gray, byte> grayFrame = convertImage.Convert<gray, byte>();
                    Image<gray, byte> cannyFrame = grayFrame.Canny(new Gray(100),new Gray(60));
                    imageViwer.Source = cannyFrame.ToBitmapSource();

                    colorBitmap.WritePixels(new Int32Rect(0, 0, sensor.ColorStream.FrameWidth, sensor.ColorStream.FrameHeight),colorPixels, colorBitmapStride, 0);
                }
            }
        }

 

如果上述一切成功,執行時便會看到以下結果

wpf_kinect_emgucv_show

 

 

結論


看到網路上有人有提到這個問題,便寫了這篇,目的也是希望以後要使用時可以快速把擷取影像的部份解決

把時間花在後面的影像處理演算流程。

 

上述兩個檔案來自原網路上,目前已經不記得是從哪找到,但是很感謝這兩個檔案幫助我能快速完成這部分

另外,也建議兩個檔案可以研讀一下 =)

 

參考資料

Kinect 結合Emgu CV影像處理(SDK v1.5) WPF版 (取自朋友的 再加了一些內容與測試)

 


 

文章中的敘述如有觀念不正確錯誤的部分,歡迎告知指正 謝謝 =)

另外要轉載請附上出處 感謝