为了完成我的工作,我调研了许多图片处理的相关工具,在这里我将其进行罗列,方便各位参考。

  1. OpenCV。OpenCV 应该是被使用地最广泛的开源实现的 Computer Vision 库了。它主要使用 C++ 语言来进行实现,所以推荐使用 C++ 来进行相关的应用开发。同时,OpenCV 也提供了许多其它语言的 bindings:譬如 python、Java 等都有支持。OpenCV 也提供了不同平台的支持:Linux、Windows、Mac OS、Android、iOS 都有 OpenCV 的实现。另外,根据我的调研,OpenCV 也是所有这些 Computer Vison 开源库中,文档最丰富的——就算没有官方资料,也可以搜索到相关的博客、帖子来找到介绍,并且,有一些专门针对 OpenCV 撰写的技术书籍可以供查阅,很省心。如果要说 OpenCV 有哪些劣势的话,我觉得就是它不够完善的其它语言支持——首先是文档资源极为不丰富,而且会因为 bingding 的过程,会产生一些找不到参考资料的疑难问题。而且,bingding 的支持也比较缓慢——就在写这篇博客的两个月前,Java Desktop的官方支持才刚刚发布,在这之前只能采用第三方 bingding 库 JavaCV
  1. OpenIMAJ。在最开始寻找 Computer Vison 的解决方案时,我倾向于使用我所最为熟悉的 Java 语言来进行开发。所以,我找到了 OpenIMAJ,并对它进行了一定程度上的研究——到最后完成了一个使用 JRuby 调用 Java 图像处理程序的 Demo。OpenIMAJ 是由 Southampton 大学的电子工程与计算机科学系所主持开发的开源库,曾经获得过 ACM Multimedia 2011 的优胜奖和推荐。OpenIMAJ 的所有的实现都是使用的 Java 语言,所以不存在 OpenCV 的 bingding 过程中各种奇形怪状的问题,并且是完全平台独立的。不过,OpenIMAJ 的文档资源十分不丰富——特别是相关介绍的博客文章,以及相关代码的使用样例——所以如果你像我一样,以前没有过 Computer Vision 领域的开发经验的话,使用起来还是有很大的阻力的。
  2. SimpleCV。SimpleCV 是使用 Python 语言实现的 Computer Vision 开源库,由 Sight Machine 的工程师们开发。相对于 OpenIMAJ 而言,它的最大优势在于完全构建于 Python 之上(哈哈),而 SimpleCV 的文档、代码使用样例、入门教程相对于 OpenIMAJ 而言,也更为丰富,而且还有一本专门讲述使用 SimpleCV 来进行 Computer Vision 进行的书——Practical Computer Vision with SimpleCV。最为重要的是,SimpleCV 有一个负责解答疑问的问答论坛,很多实际使用过程中出现的问题在这里都可以找到解答,如果你遇到的问题没有被提出过,也可以在这里提出,相关的开发人员可以告诉你究竟发生了什么。我在使用的过程中便遇到了一个 SimpleCV 本身的 bug 引发的问题,后来便在这里找到了解答。不过,正如它的名字所暗示的一样,SimpleCV 提供的功能并没有成熟的 OpenCV 所提供的丰富,而且效率上也自然是没有使用 C++ 实现的 OpenCV 高——我想这也是为何 OpenCV 被广泛地用于真正意义上的工程开发,而其它类似于 SimpleCV 这样的开源库没有的原因吧。在这篇文章里面的例子,便是使用的 SimpleCV。
  3. ImageMagick。ImageMagick 和前面两个库不同的是,它是主要专注于数字图像处理任务的工具,主要为通过命令行方式来使用。也就是说,我们可以把它当作以命令行交互形式存在的 PhotoShop。云风曾经推荐过它,建议程序员们要学会使用它来完成切图等简单的工作——对于程序员来说,这确实应该是很酷的体验。Apress 出过一本介绍 ImageMagick 的书——The Definitive Guide to ImageMagick
  4. Gimp。我想应该有很多使用 Linux 来完成日常工作的朋友都熟悉 Gimp 这款软件吧——没错,它就是很多人所说的 Linux 平台上的 PhotoShop。用它可以完成许多图像处理的工作,而且并非是以 ImageMagick 那种很 Geek 的形式展现——Gimp 是所见即所得的 GUI 交互式软件,所以,大部分朋友如果有图像处理的工作任务的话,不妨一试。

如果你知道其它有意思的相关工具、程序库的话,不妨在评论里面告诉我 :)。