C#.net 環境下使用OpenCV(一)

來源:互聯網
上載者:User
首先介紹一下EmguCV 。

EmguCV a是.NET 平台下對OpenCV 影像處理庫的封裝。也就是OpenCV的.NET 版。它運行在.NET 相容的程式設計語言下調用OpenCV 的函數,如C#、VB、VC++、IronPython 等。這個封裝庫可以在Mono 下編譯和在Linux / Mac OS X 上運行。

 

接著簡要介紹一下EmguCV的安裝步驟:

1、首先保證你的電腦已經裝好了openCV,並且保證環境變數已經設定好。具體參照OpenCV官方中文網站,寫得很清楚。

2、下載EmguCV壓縮包,其實就是幾個可以在Visual Studio2005/2008中引用OpenCV的函數的dll庫。我下的是1.50版,“Emgu.CV.Windows.Binary-1.5.0.0.zip”。解壓該壓縮包,並把其DLL拷貝在OpenCV安裝目錄下的Bin檔案夾裡。

3、建立一個c#表單應用程式,添加Bin目錄下“Emgu.CV.dll”,“Emgu.Util.dll”等DLL的引用,還有些表單的控制項,主要是將 Emgu.CV.UI.dll 加入工具箱中,加入後會出現 ImageBox、HistogramCtrl。

4、然後,再程式的開頭中加上 using Emgu.CV; using Emgu.Util;等命名空間之後就可以用EmguCV中所有的庫函數了。

 

然後說說幾個使用EmguCV的基礎問題及要注意的地方:

1、在.net中使用OpenCv和EmguCv時,必須在三者支援的映像格式之間進行轉換。.net中用Bitmap類來承載映像,OpenCv中用IplImage指標來承載映像,EmguCv中用Image<TColor,TDepth>來承載映像。

讀入映像的方法有幾種,在OpenCV中,可以使用:

IntPtr srcImage;//IntPtr代替IplImage*
srcImage = CvInvoke.cvLoadImage("lena.jpg",Emgu.CV.CvEnum.IPL_DEPTH.IPL_DEPTH_8U,1);

在EmguCV中,建議使用Image類來實現讀入操作,寫法如下

//讀入一張BGR映像,要將lena.jpg放入DEBUG目錄下。

Image<Bgr, byte> img = new Image<Bgr, byte>("lena.jpg");

//ToBitmap()將IImage格式轉換為Bitmap格式,便能為PictureBox所用了。

pictureBox1.Image = img.ToBitmap();或者pictureBox1.Image=img.Bitmap;

Image格式還可以轉換成IntPtr,如:

srcImage = img.Ptr;

Image類實在功能強大,還有封裝了很多常用的影像處理的函數。

2、圖片的資料處理

可以使用c++中OpenCV的指標訪問的辦法,但是在c#.net的環境下,是不安全的程式碼,要加上unsafe關鍵字

unsafe
{
   ((byte*)img.MIplImage.imageData + img.MIplImage.widthStep * i)[j] = 0;

}

建議使用EmguCV的寫法

//對Image<Bgr,byte>的第y行第x列進行讀取和寫入操作。

Bgr color=img[y,x];

img[y,x]=color;

Bgr格式的資料可以通過Bgr.Blue,Bgr.Green,Bgr.Red訪問,Gray格式的資料可以通過Gray.intensity訪問,所有資料都是可以讀寫的。

3、判斷一個視頻是否讀到檔案尾,不能用null,要用一個為空白類型的IntPtr,就是IntPtr eof = new IntPtr(),看其是否與eof相等。
4、IplImage*,CvCapture*等指標在C#中都用IntPtr來代替,且其中沒有cvGetMCvSize函數,故用cvGetImageROI來暫時代替
5、由於C#中沒有取地址符號&,所以在這裡所有的取地址都用引用來代替,即ref。
6、OpenCV中的所有的預定義的常量,都封裝在Emgu.CV.CvEnum這個枚舉類型裡面。

 

 

 

參考:

1、http://www.cnblogs.com/xrwang/archive/2010/01/26/TheInteractionOfOpenCv-EmguCvANDDotNet.html

2、http://hi.baidu.com/pengjun/blog/item/4ce4cb80213c3ddf9123d9c3.html

3、http://www.dotblogs.com.tw/chou/archive/2009/06/13/8812.aspx

4、http://hi.baidu.com/barty/blog/item/0bc7353eac40393671cf6c42.html

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.