以灰度显示图像

316 投票
9 回答
673417 浏览
提问于 2025-04-16 04:45

我正在尝试使用 matplotlib.pyplot.imshow() 来显示一张灰度图像。我的问题是,这张灰度图像显示成了彩色图。其实我需要它是灰度的,因为我想在图像上用颜色进行绘制。

我先用 PIL 的 Image.open().convert("L") 来读取图像并转换成灰度图。

image = Image.open(file).convert("L")

然后我把图像转换成一个矩阵,这样我就可以方便地进行一些图像处理,使用的是

matrix = scipy.misc.fromimage(image, 0)

但是,当我执行

figure()  
matplotlib.pyplot.imshow(matrix)  
show()

时,它却用彩色图来显示图像(也就是说,它不是灰度的)。

我到底哪里做错了呢?

9 个回答

29

import matplotlib.pyplot as plt

你可以在你的代码中运行一次这个命令

plt.gray()

这样默认会以灰度图的形式显示图片

im = array(Image.open('I_am_batman.jpg').convert('L'))
plt.imshow(im)
plt.show()
43

试着使用灰度色图吧?

比如说像这样:

imshow(..., cmap=pyplot.cm.binary)

想要查看色图的列表,可以去这个链接:http://scipy-cookbook.readthedocs.org/items/Matplotlib_Show_colormaps.html

503

下面的代码会从一个文件 image.png 中加载一张图片,并将其显示为灰度图。

import numpy as np
import matplotlib.pyplot as plt
from PIL import Image

fname = 'image.png'
image = Image.open(fname).convert("L")
arr = np.asarray(image)
plt.imshow(arr, cmap='gray', vmin=0, vmax=255)
plt.show()

如果你想显示反转的灰度图,只需要把颜色映射改成 cmap='gray_r' 就可以了。

撰写回答