plt.imshow在IPython中显示灰度图像的彩色图像

23

我有以下RGB图像 imRGB

import cv2
import matplotlib.pyplot as plt

#Loading the RGB image
imRGB = cv2.imread('*path*')

imRGB.shape
>>(128L, 128L, 3L)

#plotting
plt.imshow(imRGB)

imRGB

我将其转换为灰度图像 imGray

imGray = cv2.cvtColor(imRGB, cv2.COLOR_BGR2GRAY)

imGray.shape
>>(128L, 128L)

#plotting
plt.imshow(imGray)

imGray


问题:为什么灰度图像imGray以彩色显示?

2个回答

42

imRGB是一个3D矩阵(高度x宽度x 3)。 现在,imGray是一个2D矩阵,其中没有颜色,只有“亮度”值。 因此,matplotlib默认应用了一种颜色映射。

阅读这个页面,尝试应用灰度颜色映射或不同的颜色映射,并检查结果。

plt.imshow(imGray, cmap="gray")

使用此页面作为参考来查看调色板。如果某些调色板无法正常工作,请尝试其他调色板。


你可以使用以下代码将此设置为默认值(特别是当您只使用灰度图像时): plt.rcParams['image.cmap'] = 'gray' 更多信息,请查看这个问题 - Rodrigo Laguna

1
如果您想显示单通道灰度图像,则应将值重新缩放为[0,1.0],数据类型为float32,并且pyplot将使用伪彩色呈现灰度图像。因此,应选择colormap为gray
plt.imshow(imGray/255.0, cmap='gray')

根据文档: 图像教程
对于RGB和RGBA图像,matplotlib支持float32和uint8数据类型。对于灰度图像,matplotlib仅支持float32。如果数组数据不符合这些描述,则需要重新缩放。
伪彩色可以是增强对比度和更轻松地可视化数据的有用工具。在使用投影仪展示数据时,这尤其有用 - 它们的对比度通常非常差。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接