plt.gray() 不工作并在 matplotlib 中显示原始彩色图像

plt.gray() is not working and displaying original color image in matplotlib

使用以下代码,plt.gray() 无法正常工作并显示彩色图像而不是灰度图像。即使我把 cmap="gray" 单独放在 plt.imshow 中,它仍然显示彩色图像。谢谢你。 (请注意,原图smallimage.jpg为彩图)

from matplotlib import image as image, pyplot as plt
img  = image.imread('/content/drive/MyDrive/Z ML Lab/data/smallimage.jpg')
plt.gray()
plt.imshow(img, cmap="gray")

您的图像是 RGB 颜色。来自 imshow 文档字符串:

cmap : str or `~matplotlib.colors.Colormap`, default: :rc:`image.cmap`
    The Colormap instance or registered colormap name used to map
    scalar data to colors. This parameter is ignored for RGB(A) data.

特别注意“RGB(A) 数据忽略此参数。”

如果您想将图像显示为灰度,则必须以某种方式“拉平”颜色。做这件事有很多种方法;一种是只显示其中一个颜色通道,例如

plt.imshow(img[:, :, 0], cmap="gray")  # Display the red channel

另一种流行的方法是对通道进行加权平均,权重为 [0.299, 0.587, 0.113]:

imshow(img @ [0.299, 0.587, 0.113], cmap='gray')

有关更多想法,请参阅 "Converting colour to grayscale"