matplotlib相当于skimage.io.imread(fname,as_grey = True)?

时间:2014-04-10 01:36:39

标签: python matplotlib scipy scikit-image

因为这是一个非常普遍的做法......我想知道scikit-image中的matplotlib等效于此功能吗?

from skimage import io
im = io.imread(fname, as_grey=True)

直接将RGB文件读取为灰度?

我需要使用matplotlib等效项,因为我用它来绘制结果。正如我所观察到的,似乎io.imread读取的ndarray与plt.imread读取的不相同。

谢谢!

3 个答案:

答案 0 :(得分:5)

您可以使用matplotlib.pyplot.imread阅读图片。这将为您提供RGB或RGBA图像。如果您获得RGBA图像,您可能想要丢弃alpha图层:

rgb = rgba[..., :3]

您可以通过

获得灰度图像的近似值
rgb.mean(axis=2)

但这并不完全正确。人们应该将不同权重的信道相乘,然后将它们组合起来,即

([0.2125, 0.7154, 0.0721] * rgb).sum(axis=2)

答案 1 :(得分:1)

如果您有PIL,那么您可以将文件读入灰度PIL图像,然后将其转换为NumPy数组:

import Image

img = Image.open(FILENAME).convert('L')
arr = np.array(img)

答案 2 :(得分:0)

您还可以将scipy.misc.imreadflatten=True一起使用。它取决于正在安装的PIL但返回一个数组对象。

Docstring:
Read an image file from a filename.

Parameters
----------
name : str
    The file name to be read.
flatten : bool, optional
    If True, flattens the color layers into a single gray-scale layer.

Returns
-------
imread : ndarray
    The array obtained by reading image from file `name`.

Notes
-----
The image is flattened by calling convert('F') on
the resulting image object.