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

jxr*_*mos 4 python image-processing package

我有点困惑为什么 Python 实现了如此多的成像包,并且一直试图找到一个表格来比较和对比它们之间的功能、优点/缺点、速度/性能、应用领域等。到目前为止我知道 PIL、mahotas、scikits.image 和 scipy.ndimage。我想我们还可以包含外部库(例如 ImageMagic、OpenCV、Cairo 等)支持的许多绑定,但让我们从专门为 Python 编写的内容开始。有谁知道第一手资料,或者熟悉博客文章或某个中心位置,所有这些包都在其中进行比较和区分。

jcu*_*itt 5

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

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

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

测试是在 libvips wiki 上进行的,所以当然 libvips (和pyvips,Python 绑定)获胜,但根据我的经验,结果是一个合理的指南,至少对于像这样的简单任务来说是这样。比较代码也很有趣。

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 
Run Code Online (Sandbox Code Playgroud)

以下是同样的图形:

图形速度内存使用