比较和对比 Python 的许多图像处理库

Comparing and Contrasting Python's many Image Processing Libraries

我有点不明白为什么 Python 实施了如此多的图像包,并且一直在努力寻找 table 比较和对比任一功能,strengths/weaknesses,speed/performance、应用领域等等他们之间的一堆。到目前为止,我知道 PIL、mahotas、scikits.image 和 scipy.ndimage。我想我们还可以包括许多受外部库支持的绑定,例如 ImageMagic、OpenCV、Cairo 等,但让我们从专门为 Python 编写的内容开始。有没有人知道第一手资料,或者熟悉博客 post 或比较所有这些包并相互区分的某个中心位置。

我广泛使用了 mahotas,但目前切换到 scikit-image。我发现 scikit-image 的功能比 mahotas 更广泛(我需要经常测试各种图像处理算法)。 Mahotas 的主要优点是简单的代码和良好的文档,这与其 mahotas-principles 一致。因此,如果您需要基本功能和更快的操作,请选择 Mahotas。我还没有对 scipy-nd image 做详细的研究,但是看看可用函数列表,skimage 会占上风。

我帮助维护 libvips wiki 上的一个页面,比较 20 个左右的常见图像处理库的速度和内存使用情况,包括相当多的 Python 系统。

https://github.com/libvips/libvips/wiki/Speed-and-memory-use

基准测试非常简单:加载 5,000 x 5,000 像素的 RGB TIFF,从每个边缘裁剪 100 个像素,缩小 10%,使用 3x3 卷积进行锐化,然后再次保存。这是一个愚蠢的测试,但实施起来很简单,而且它确实练习了卷积、load/save、重采样和像素操作。

测试在 libvips wiki 上,所以当然是 libvips(和 pyvips, the Python binding) wins, but the results are a reasonable guide, at least for simple tasks like this, in my experience. It's also fun to compare the code

System                    | Run time (secs) | Peak mem use (MB)
---------------------------------------------------------------
libvips C 8.8             | 0.15            |  40 
pyvips 2.1.6              | 0.18            |  49 
Pillow-SIMD 5.3           | 0.36            | 230 
NetPBM 10.0-15.3          | 0.60            |  75 
sips 10.4.4               | 0.70            | 268 
GraphicsMagick 1.3.28     | 0.64            | 493 
ImageMagick 6.9.7-4       | 0.82            | 463 
OpenCV 3.2                | 0.93            | 222 
ImageMagick 7.0.8         | 1.37            | 733 
ImageJ 1.51               | 2.84            | 770 
scipy 1.2 + Pillow        | 4.33            | 361 

这是相同的图形: