各種圖像處理類庫(kù)的比較及選擇(The Comparison of Image Processing Libraries)作者:王先榮
前言
近期需要做一些圖像處理方面的學(xué)習(xí)和研究,首要任務(wù)就是選擇一套合適的圖像處理類庫(kù)。目前較知名且功能完善的圖像處理類庫(kù)有OpenCv、EmguCv、AForge.net等等。本文將從許可協(xié)議、下載、安裝、文檔資料、易用性、性能等方面對(duì)這些類庫(kù)進(jìn)行比較,然后給出選擇建議,當(dāng)然也包括我自己的選擇。
許可協(xié)議
類庫(kù)許可協(xié)議許可協(xié)議網(wǎng)址大致介紹
OpenCvBSDwww.opensource.org/licenses/bsd-license.html在保留原來(lái)BSD協(xié)議聲明的前提下,隨便怎么用都行
EmguCvGPL v3http://www.gnu.org/licenses/gpl-3.0.txt你的產(chǎn)品必須也使用GPL協(xié)議,開源且免費(fèi)
商業(yè)授權(quán)http://www.emgu.com/wiki/files/CommercialLicense.txt給錢之后可以用于閉源的商業(yè)產(chǎn)品
AForge.netLGPL v3http://www.gnu.org/licenses/lgpl.html如果不修改類庫(kù)源代碼,引用該類庫(kù)的產(chǎn)品可以閉源和(或)收費(fèi)
以上三種類庫(kù)都可以用于開發(fā)商業(yè)產(chǎn)品,但是EmguCv需要付費(fèi);因?yàn)槲抑皇怯脕?lái)學(xué)習(xí)和研究,所以這些許可協(xié)議對(duì)我無(wú)所謂。不過(guò)鑒于我們身在中國(guó),如果臉皮厚點(diǎn),去他丫的許可協(xié)議。
下載
可以很方便的下載到這些類庫(kù),下載地址分別為:
類庫(kù)
下載地址
OpenCv
http://sourceforge.net/projects/opencvlibrary/files/
EmguCv
http://www.emgu.com/wiki/index.php/Download_And_Installation
AForge.net
http://www.aforgenet.com/framework/downloads.html
安裝
這些類庫(kù)的安裝都比較簡(jiǎn)單,直接運(yùn)行安裝程序,并點(diǎn)“下一步”即可完成。但是OpenCv在安裝完之后還需要一些額外的處理才能在VS2008里面使用,在
http://www.opencv.org.cn有一篇名為《VC2008 Express下安裝OpenCv 2.0》的文章專門介紹了如何安裝OpenCv。
類庫(kù)
安裝難易度
備注
OpenCv
比較容易
VC下使用需要重新編譯
EmguCv
容易
AForge.net
容易
相信看這篇文章的人都不會(huì)被安裝困擾。
文檔資料
類庫(kù)
總體評(píng)價(jià)
書籍
網(wǎng)站
文檔
示例
社區(qū)
備注
OpenCv
中等
中英文
中英文
中英文
較多
中文論壇
有中文資料但不完整
EmguCv
少
無(wú)
英文
英文
少
英文論壇
論壇人氣很差
AForge.net
少
無(wú)
英文
英文
少
英文論壇
論壇人氣很差
OpenCv有一些中文資料,另外兩種的資料全是英文的;不過(guò)EmguCv建立在OpenCv的基礎(chǔ)上,大部分OpenCv的資料可以用于EmguCv;而AForge.net是原生的.net類庫(kù),對(duì)GDI+有很多擴(kuò)展,一些MSDN的資料可以借鑒。如果在查詞典的基礎(chǔ)上還看不懂英文文檔,基本上可以放棄使用這些類庫(kù)了。
易用性
易用性這玩意,主觀意志和個(gè)人能力對(duì)它影響很大,下面是我的看法:
類庫(kù)
易用性
備注
OpenCv
比較差
OpenCv大多數(shù)功能都以C風(fēng)格函數(shù)形式提供,少部分功能以C++類提供。注意:2.0版將更多的功能封裝成類了。
EmguCv
比較好
將OpenCv的絕大部分功能都包裝成了.net類、結(jié)構(gòu)或者枚舉。不過(guò)文檔不全,還是得對(duì)照OpenCv的文檔去看才行。
AForge.net
好
純.net類庫(kù),用起來(lái)很方便。
最近幾年一直用的是C# ,把C和C++忘記得差不多了,況且本來(lái)C/C++我就不太熟,所以對(duì)OpenCv的看法恐怕有偏見(jiàn)。
性能
這些類庫(kù)能做的事情很多,我選了最基礎(chǔ)的部分來(lái)進(jìn)行性能測(cè)試,那就是將一幅彩色圖像轉(zhuǎn)換成灰度圖,然后再將灰度圖轉(zhuǎn)換成二值圖像。因?yàn)閳D像處理大部分時(shí)間都用于內(nèi)存讀寫及運(yùn)算(特別是矩陣運(yùn)算),所以這兩種操作有一定的代表性。
我分別用以下方式實(shí)現(xiàn)了圖像的灰度化及二值化:(1)C語(yǔ)言調(diào)用OpenCv庫(kù);(2)C#調(diào)用AForge.net庫(kù);(3)C#調(diào)用EmguCv庫(kù);(4)C#中用P/INVOKE的形式調(diào)用OpenCv函數(shù);(5)C#調(diào)用自己寫的灰度和二值化方法。
C語(yǔ)言調(diào)用OpenCv
C#調(diào)用各種類庫(kù)處理圖像
分別用上述5種形式處理10次,記錄下運(yùn)行時(shí)間,去掉每種的最大和最小數(shù)據(jù),然后計(jì)算平均值。結(jié)果如下所示(單位是毫秒):
語(yǔ)言
類庫(kù)
灰度化
二值化
性能排名
C
OpenCv
16.89721
7.807766
1
C#
Aforge.net
48.9403
25.32473
5
C#
EmguCv
18.86898
13.74628
3
C#
OpenCv(P/Invoke)
18.68938
10.0149
2
C#
自定義處理方法
48.33593
21.46168
4
測(cè)試環(huán)境如下:CPU-奔騰4 2.4G,內(nèi)存-512M,操作系統(tǒng)-Windows XP SP2,顯卡-nVidia GForce4 64M,進(jìn)程數(shù)-49,線程數(shù)-611,句柄數(shù)-13004,可用內(nèi)存101M。
毫無(wú)疑問(wèn),用C語(yǔ)言調(diào)用OpenCv的性能最好,兩種純.net的方式性能最差。
C語(yǔ)言調(diào)用OpenCv的處理效果如下所示:
C#的處理效果如下:
結(jié)論
將上面的內(nèi)容匯總結(jié)果如下表所示:
類庫(kù)
OpenCv
EmguCv
AForge.net
許可協(xié)議
BSD
GPL v3或商業(yè)授權(quán)
LGPL v3
下載
方便
方便
方便
安裝
比較容易
容易
容易
文檔資料
中等
少
少
易用性
比較差
比較好
好
性能
很好
比較好
不好
綜上所述,我的選擇是使用EmguCv作為我的圖像處理類庫(kù),在必要的時(shí)候用P/Invoke的形式調(diào)用沒(méi)有被封裝的OpenCv函數(shù)。你呢?
感謝您耐心看完本文,希望對(duì)您有所幫助。