各种图像处理类库的比较及选择(The Comparison of Image Processing Libraries)

来源:互联网 发布:51单片机40引脚 编辑:程序博客网 时间:2024/05/16 09:29

文章来源:http://www.cnblogs.com/xrwang/archive/2010/01/26/TheComparisonOfImageProcessingLibraries.html

作者:王先荣

前言

近期需要做一些图像处理方面的学习和研究,首要任务就是选择一套合适的图像处理类库。目前较知名且功能完善的图像处理类库有OpenCv、EmguCv、AForge.net等等。本文将从许可协议、下载、安装、文档资料、易用性、性能等方面对这些类库进行比较,然后给出选择建议,当然也包括我自己的选择。

许可协议

类库             许可协议          许可协议网址                                                       大致介绍
OpenCv         BSD            www.opensource.org/licenses/bsd-license.html        在保留原来BSD协议声明的前提下,随便怎么用都行
EmguCv        GPL v3         www.gnu.org/licenses/gpl-3.0.txt                          你的产品必须也使用GPL协议,开源且免费
                    商业授权        www.emgu.com/wiki/files/CommercialLicense.txt      给钱之后可以用于闭源的商业产品
AForge.net    LGPL v3        www.gnu.org/licenses/lgpl.html                              如果不修改类库源代码,引用该类库的产品可以闭源和(或)收费

下载

可以很方便的下载到这些类库,下载地址分别为:

类库                 下载地址
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

安装

这些类库的安装都比较简单,直接运行安装程序,并点“下一步”即可完成。但是OpenCv在安装完之后还需要一些额外的处理才能在VS2008里面使用,在http://www.opencv.org.cn有一篇名为《VC2008 Express下安装OpenCv 2.0》的文章专门介绍了如何安装OpenCv。

类库            安装难易度            备注
OpenCv       比较容易             VC下使用需要重新编译
EmguCv         容易
AForge.net     容易

相信看这篇文章的人都不会被安装困扰。

文档资料          

类库              总体评价              书籍              网站               文档           示例              社区             备注
OpenCv           中等                中英文           中英文            中英文          较多           中文论坛         有中文资料但不完整
EmguCv           少                     无               英文               英文            少             英文论坛         论坛人气很差
AForge.net       少                     无               英文               英文            少             英文论坛         论坛人气很差

OpenCv有一些中文资料,另外两种的资料全是英文的;不过EmguCv建立在OpenCv的基础上,大部分OpenCv的资料可以用于EmguCv;而AForge.net是原生的.net类库,对GDI+有很多扩展,一些MSDN的资料可以借鉴。如果在查词典的基础上还看不懂英文文档,基本上可以放弃使用这些类库了。

易用性

易用性这玩意,主观意志和个人能力对它影响很大,下面是我的看法:

类库             易用性                         备注
OpenCv        比较差       OpenCv大多数功能都以C风格函数形式提供,少部分功能以C++类提供。注意:2.0版将更多的功能封装成类了。
EmguCv       比较好       将OpenCv的绝大部分功能都包装成了.net类、结构或者枚举。不过文档不全,还是得对照OpenCv的文档去看才行。
AForge.net      好          纯.net类库,用起来很方便。

最近几年一直用的是C# ,把C和C++忘记得差不多了,况且本来C/C++我就不太熟,所以对OpenCv的看法恐怕有偏见。

性能

这些类库能做的事情很多,我选了最基础的部分来进行性能测试,那就是将一幅彩色图像转换成灰度图,然后再将灰度图转换成二值图像。因为图像处理大部分时间都用于内存读写及运算(特别是矩阵运算),所以这两种操作有一定的代表性。

我分别用以下方式实现了图像的灰度化及二值化:(1)C语言调用OpenCv库;(2)C#调用AForge.net库;(3)C#调用EmguCv库;(4)C#中用P/INVOKE的形式调用OpenCv函数;(5)C#调用自己写的灰度和二值化方法。

wps_clip_image-22910C语言调用OpenCv

wps_clip_image-12556C#调用各种类库处理图像

分别用上述5种形式处理10次,记录下运行时间,去掉每种的最大和最小数据,然后计算平均值。结果如下所示(单位是毫秒):

语言        类库                     灰度化          二值化             性能排名
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

结论

将上面的内容汇总结果如下表所示:

类库                 OpenCv            EmguCv                        AForge.net
许可协议           BSD                 GPL v3或商业授权            LGPL v3
下载                 方便                 方便                               方便
安装                比较容易             容易                              容易
文档资料           中等                  少                                  少
易用性             比较差               比较好                             好
性能                 很好                比较好                             不好

综上所述,我的选择是使用EmguCv作为我的图像处理类库,在必要的时候用P/Invoke的形式调用没有被封装的OpenCv函数。你呢?

感谢您耐心看完本文,希望对您有所帮助。

原创粉丝点击