Python: matplotlib.image和scipy.misc有什么区别?

4

在Python的Matplotlib和SciPy图像处理工具中,有许多类似的函数,比如imread。
这些库是否共享通用功能或使用相同的模块?
在处理图像时,读取、保存等操作应该使用Matplotlib函数还是SciPy函数?

1个回答

3
简短回答:它们都加载numpy数组。唯一的区别是用于加载它们的方法。我建议使用scipy的方法,甚至使用scikits-image
来自matplotlib's imread documentation
返回值是一个numpy.array。对于灰度图像,返回的数组是MxN。对于RGB图像,返回值为MxNx3。对于RGBA图像,返回值为MxNx4。
来自scipy's imread documentation
返回值:
imread : ndarray 从文件imfile读取图像获得的数组。
(通过ndarray指的是numpy.ndarray,因为scipy是基于numpy构建的)。

Scikits-image支持除了PIL之外的其他插件,例如freeimage或库tifffile,甚至是matplotlib本身。请查看scikits-image to load and save images支持的所有插件/库。


2
scipy 也会以与 matplotlib 相同的格式返回数组。如果您遵循 imread 的 scipy 源代码,它会调用一个名为 fromimage 的函数,该函数说:“不同的颜色带/通道存储在第三个维度中,因此灰度图像是 MxN,RGB 图像是 MxNx3,RGBA 图像是 MxNx4”。 - tmdavison
@tom 是的,这正是我所说的。它们都返回相同的 numpy array。唯一的区别是它们用于加载它的插件。如果可用,Matplotlib 将使用 PIL,而 scipy 实际上使用 PIL。然后将其转换为 numpy 数组。 - Imanol Luengo
1
是的,我觉得这值得一提,因为你从文档中获取的片段并没有明确说明RGB(A)图像会得到一个MxNx{3,4} - tmdavison

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