2

因为这是一种非常普遍的做法......我想知道 matplotlib 是否等同于 scikit-image 中的这个函数?

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

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

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

谢谢!

4

3 回答 3

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)
于 2014-04-10T08:29:19.127 回答
1

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

import Image

img = Image.open(FILENAME).convert('L')
arr = np.array(img)
于 2014-04-10T01:43:49.227 回答
0

您也可以使用scipy.misc.imreadwith flatten=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.
于 2014-04-10T02:17:49.170 回答