最快的Python原生方式来操纵图像?

时间:2017-11-02 23:49:58

标签: python image imagemagick python-imaging-library scikit-image

我正在创建一个迭代图像并进行x / y变换和缩放的过程。原始图像非常大。我当前的过程涉及使用一个bash脚本(使用python)创建具有所有着名的Imagemagick转换的行和行。使用转换的主要好处是你可以将图像加载到内存中一次,然后写出每一帧。但是,这个bash脚本工作流程是不可持续的,我需要更原生的东西。所以这引出了一个问题:

  • 什么是最快的图像python处理库 操作?考虑到图像的大小,速度就是 目标

这是我的研究(以及一些修补)引导我的地方:

  

魔杖(Imagemagick包装) - 从理论上讲,魔杖会很棒!但我没有提到能够从中读取图像   记忆,这使得它非常慢。

     

Skimage - 我喜欢使用Skimage进行深度操作(尽管我的需求有些过分),但我发现了API /文档   很难配合。但是,您可以加载一个   将图像转换为numpy数组并获得惊人的速度(对于Python,   无论如何),似乎是一个令人信服的论点。

     

PIL - Pil安装起来非常棘手,这对我正在尝试部署的一些系统造成了很多麻烦。但是,它是API   相当容易。我听说一般都要远离PIL   这是持续的发展困境。

     

Pillow - 与上述类似,我在让Pillow工作时遇到了一些麻烦。我想我读到Pillow可能与PIL冲突......也许吧   那是问题吗?

我希望得到一些意见。

1 个答案:

答案 0 :(得分:2)

这对于单个评论来说太长了。所以我把它放在这里。

请注意,除了ImageMagick之外,我不是任何这些工具的专家,但每个工具都涉及到一些问题。

我欢迎来自其他人的评论或意见比我使用这些工具更多的专业知识

我没有使用Wand或PIL。我不喜欢PIL,因为在我有限的经验中没有重新格式化它与numpy不兼容。所以我不使用它。如果您喜欢ImageMagick转换,Wand看起来不错。我已经将Skimage和OpenCV用于不同的事情。并将它们混合在一些Python numpy脚本中。

如果您了解ImageMagick,Wand可能是最容易使用的。我对它的速度知之甚少。见http://docs.wand-py.org/en/0.4.1/wand/image.html。我相信存在的一个魔杖限制是它缺乏处理配置文件的能力。

请参阅http://pillow.readthedocs.io/en/3.1.x/reference/Image.html了解PIL,这可能是下一个最容易使用的PIL。但它的图像格式可能需要更改格式才能使用numpy。我不认为它像魔杖一样功能齐全。

另请参阅http://scikit-image.org/docs/dev/api/skimage.transform.html以了解旋转,调整大小和仿射变换。它是下一个最容易使用的,但可能比其他两个更快。

另请参阅https://docs.opencv.org/3.0-beta/doc/py_tutorials/py_imgproc/py_geometric_transformations/py_geometric_transformations.html,尽管您必须使用矩阵完成所有这些操作。它也非常快,并具有GPU功能。

除了我发现Skimage和OpenCV比Imagemagick更快,我没有时间经验。但除了我上面的评论之外,它们对Imagemagick可以做的简单事情的功能不那么直接了。

我认为你必须在编码的速度和效率方面决定你想要的妥协。

如果有人知道在简单的操作(如调整大小,旋转,裁剪,仿射,透视等)上比较这些工具的一组编码和速度测试,那么这将是有用的,我欢迎了解更多有关比较的信息。

P.S。我发现这些关于PIL的参考文献已经过时并被Pillow取代:

http://pillow.readthedocs.io/en/3.4.x/about.html http://pillow.readthedocs.io/en/3.4.x/installation.html

另见docs: https://pypi.python.org/pypi/Pillow/4.3.0 https://pillow.readthedocs.io/en/4.3.x/reference/Image.html

我还没有尝试过更新版的Pillow。