因为这是一种非常普遍的做法......我想知道 matplotlib 是否等同于 scikit-image 中的这个函数?
from skimage import io
im = io.imread(fname, as_grey=True)
直接将RGB文件读取为灰度?
我需要使用 matplotlib 等效项,因为我正在使用它来绘制结果。正如我所观察到的,io.imread 读取的 ndarray 似乎与 plt.imread 读取的不等价。
谢谢!
因为这是一种非常普遍的做法......我想知道 matplotlib 是否等同于 scikit-image 中的这个函数?
from skimage import io
im = io.imread(fname, as_grey=True)
直接将RGB文件读取为灰度?
我需要使用 matplotlib 等效项,因为我正在使用它来绘制结果。正如我所观察到的,io.imread 读取的 ndarray 似乎与 plt.imread 读取的不等价。
谢谢!
您可以使用 读取图像matplotlib.pyplot.imread
。这将为您提供 RGB 或 RGBA 图像。如果你得到一个 RGBA 图像,你可能想要丢弃 alpha 层:
rgb = rgba[..., :3]
您可以通过执行获得灰度图像的近似值
rgb.mean(axis=2)
但这并不完全正确。应该将具有不同权重的通道相乘,然后将它们组合起来,即
([0.2125, 0.7154, 0.0721] * rgb).sum(axis=2)
如果你有 PIL,那么你可以将文件读入灰度 PIL 图像,然后将其转换为 NumPy 数组:
import Image
img = Image.open(FILENAME).convert('L')
arr = np.array(img)
您也可以使用scipy.misc.imread
with 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.