因为这是一个非常普遍的做法......我想知道scikit-image中的matplotlib等效于此功能吗?
from skimage import io
im = io.imread(fname, as_grey=True)
直接将RGB文件读取为灰度?
我需要使用matplotlib等效项,因为我用它来绘制结果。正如我所观察到的,似乎io.imread读取的ndarray与plt.imread读取的不相同。
谢谢!
答案 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.imread
与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.