2011年3月29日 星期二

Image Process: Introduction to EmguCV-Part1

Image Process: Introduction to EmguCV-Part1: "Introduction of EmguCV Document: 為了將OpenCV的應用能廣至跨平台,以及能應用在自己撰寫的User interface 上面,所以翻譯EmguCV的技術文件。資料來源: http://www.emgu.com/wiki/index.php/M..."

Introduction to EmguCV-Part1


Introduction of EmguCV Document:

為了將OpenCV的應用能廣至跨平台,以及能應用在自己撰寫的User interface 上面,所以翻譯EmguCV的技術文件。
資料來源: http://www.emgu.com/wiki/index.php/Main_Page
(目前只翻譯有關C#的應用部分,)


CH1 : Introduction of EmguCV

Emgu CV Intel OpenCV 的影像處理函式庫封裝為跨平台.Net 的函式庫,允許在.NET呼叫 OpenCV函式的形式與C#, VB, VC++,IronPython等語言相容

**The wrapper can be compiled in Mono and run on Linux / Mac OS X. **
//-------------------------------------------------------------------------------------------------------------//

  Emgu CV 的優點
跨平台(Cross Platform)
Emgu CV 的功能在C#中可以完全的被應用. 它的優勢是可以在Mono中被編譯 因此有能力在 Mono所支援的平台執行程式 包含 Linux, Solaris 還有 Mac OS X
有更多的功能已經被應用在C#的執行上,比較起C++的執行OpenCV標頭檔的Include更容易被執行,並且它的更有價值的是如果你看見EmguCVFedora 10(Linux)上執行的話, 使用它通常會因為你會覺得你的的程式是跨平台的程式碼,而感到舒暢的感受。
附有Cross Langurage的範例程式。
Emgu CV 可以被數種不一樣的語言使用包含 C#, VB.NET, C++ and IronPython. 



架構概述(Architecture Overview)

Emgu CV 有兩層的封裝,所式如下:
第一層 (layer 1) 包含函式 (function), 結構(structure和列舉映射 (enumeration mappings) ,直接的表現出OpenCV的功能.
第二層 (layer 2) 包含類別物件

CH2: 使用說明 (Tutorial)

OpenCV 的封裝 (Wrapping OpenCV)

Function Mapping - Emgu.CV.CvInvoke

.Net的語言中,CvInvoke class提供了直接使用OpenCV 函式的方法。
在這一個類別的每一個函式,都和原本OpenCV 函式的命名一樣。
舉例來說:
OpenCV 用來建立圖片大小及宣告名稱的方式如下:)
IplImage* image = 
                       cvCreateImage(cvSize(400, 300), IPL_DEPTH_8U, 1);
這方式同等於在CvInvoke class 呼叫下列函式:
 
IntPtr image = 
CvInvoke.cvCreateImage(new System.Drawing.Size(400, 300), 
                                                         CvEnum.IPL_DEPTH.IPL_DEPTH_8U, 1);
這兩種程式碼都是在建立400x300 8-bit 灰階圖片。


EmguCV的結構型式為Emgu.CV.Structure.Mxxx

這樣的結構型式是直接對應到OpenCV的結構型式
這兩者之間的關係如下圖所示:
詞首的M代表的是Managed structure.

Emgu CV 也借用一些存在於.NET中的結構,來取代OpenCV中有著相同功能的結構,如下表所示:



Emgu.CV.CvEnum
CvEnum 的命名空間(namespace)提供直接和OpenCV對應的相關命名參數 (enumerations.)
舉例來說:
CvEnum.IPL_DEPTH.IPL_DEPTH_8UOpenCV中和IPL_DEPTH_8U
都等於同一個值(8)

主要的類別 (Managed classes)

分為以下兩列:

處理圖片的類別(Working with Images)

處理陣列運算的類別(Working with Matrices)



使用Visual Studio的注意事項 (Intellisense in Visual Studio)

如果你們使用Visual Studio 當作開發的工具,你必須在發展Emgu CV的應用上有充分的明智的了解。

舉例來說: 如果你想使用 cvCreateImage函式建立一張圖片,在EmguCV這函式被封裝在CvInvoke 的類別內。

所以在使用時,程式會寫成CvInvoke.cvCreateImage


上表表示在CvInvoke 的類別內可以使用的Functions

//安裝方法以及使用說明會記載於Introduction to EmguCV-Part2 //