图像处理,用Python实现?

82

我最近遇到了一个需要至少基本图像处理技能的问题,我可以使用Python解决吗?如果可以,应该如何操作?


4
实时图像处理使用 PyPy:http://morepypy.blogspot.com/2011/07/realtime-image-processing-in-python.html - Mikhail Poda
8个回答

53

最著名的库是PIL。然而,如果您只是做基本的操作,那么使用Python绑定的ImageMagick可能会比在Python中编写转换更有效。


7
我认为你的理解是反过来的:PIL仅提供最基本的裸功能,但它可以很好地集成到Python GUI中。IM则具有更丰富的功能,但需要一些手动工作来在GUI中进行缓冲区交换以实现集成。 - SilverbackNet
19
这样说吧,令人难过的是,看起来PIL已经被放弃更新了,而且它甚至不能加载使用Paint创建的BMP文件。如果你查看这个项目的网页,你会发现缺少bug追踪器、邮件列表活动和SCM等。 - sorin
19
Pillow是PIL的一个分支,正在进行维护和开发。最好使用它代替原来的库。 - David Johnstone

46
根据您对"图像处理"的理解,更好的选择可能是基于numpy的库:mahotasscikits.imagescipy.ndimage。所有这些都基于numpy数组工作,因此您可以混合和匹配来自一个库和另一个库的函数。
我创建了网站http://pythonvision.org,其中包含有关这些内容的更多信息。

scikits.image SciKit(SciPy的工具包)扩展了scipy.ndimage,提供了一组多功能的图像处理例程。我想知道为什么他们没有直接为ndimage做出贡献。 - endolith
1
所有这些包都有不同的内部结构。至少我的包mahotas从ndimage中引用了很多代码。 - luispedro
scikit-image现在托管在http://scikit-image.org上。 - Stefan van der Walt
scipy.ndimage的链接已经失效。当前链接很可能是:http://scipy.github.io/devdocs/tutorial/ndimage.html - kmonsoor

19
你还可以使用基于"标准"科学模块的图像处理方法: SciPy 有一个专门用于图像处理的完整包:scipy.ndimage。Scipy实际上是标准的通用数值计算包;它基于事实上的标准数组操作模块NumPy:图像也可以被处理为数字数组。至于图像显示,Matplotlib(也是"科学三部曲"的一部分)使得显示图像非常简单。quite simple
SciPy仍然处于积极维护状态,因此它是未来的不错选择。此外,SciPy目前也支持Python 3,而Python Imaging Library (PIL)则不支持。

以后参考,请注意ndimage无论如何都需要PIL。 - davidtbernal
1
@notJim: 是这样吗?在MacPorts中,SciPy的依赖项列表中没有列出PIL,并且我可以在没有安装PIL的情况下执行import scipyimport Image失败并显示ImportError)。 - Eric O. Lebigot
2
是的,当我尝试使用ImRead读取图像时,出现了错误“raise ImportError("Could not import the Python Imaging Library (PIL)"”。 - davidtbernal
2
@notJim:SciPy确实依赖于PIL进行图像读取(我尝试使用“简单”的JPEG文件,结果失败,就像你的例子一样)。但是,即使没有PIL(PIL是可选依赖项),SciPy仍然可以进行图像处理 - Eric O. Lebigot

11

1
OpenCV现在位于http://opencv.org/。 - Nianliang

7

此外还有pycairo,根据您的需求可能更加适合。


6

实际上有一个非常棒的Python Imaging Library (PIL)。它可以让您修改现有图像,包括抗锯齿能力,并创建带有文本等内容的新图像。您还可以在上述网站提供的PIL手册中找到不错的入门教程


9
在你提出这个问题之前,你有使用谷歌吗?:-) 我并不是说你“应该”,只是觉得在不到一分钟内回答自己的问题有点好笑。 - Alexandra Franks
5
这个网站的整个理念是提供(问题、答案)对,为搜索该主题的人提供有用信息。如果你发现了之前不知道的有用信息,并且它还没有出现在该网站上,我们鼓励你与StackOverflow分享。 - akdom
8
从常见问题解答中得知: 自己提出并回答编程问题是完全可以的,但需要像“危险边缘”游戏节目一样用问题的形式来提问。 尽管如此,我认为这个问题可以很快通过谷歌搜索得到答案。 - Martin W
5
@MartinW - 我通过谷歌搜索找到了这个问题。 - Bulwersator

4

3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接