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

时间:2016-12-21 14:50:50

标签: image opencv matplotlib ipython ipython-notebook

我有以下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 个答案:

答案 0 :(得分:8)

imRGB是一个3D矩阵(高x宽x 3) 现在imGray是一个2D矩阵,其中没有颜色,只有“光度”值。 所以matplotlib默认应用了一个colormap。

阅读this page并尝试应用灰度色彩图或不同的色彩图,检查结果。

$_POST

this page as reference用于色彩映射。某些色彩图无法使用,如果发生,请尝试使用其他色彩映射。

答案 1 :(得分:1)

如果要显示单通道灰度图像,则应使用dtype = float32将值重新缩放为[0,1.0],并且pyplot将使用伪彩色渲染灰度图像。因此应将颜色映射选择为gray

plt.imshow(imGray/255.0, cmap='gray')

根据文档: Image tutorial

对于RGB和RGBA图像,matplotlib支持float32和uint8数据类型。对于灰度,matplotlib仅支持float32。如果您的阵列数据不符合以下描述之一,则需要重新缩放比例。

...

伪彩色可以用作增强对比度并更轻松地可视化数据的有用工具。当使用投影仪演示数据时,这特别有用-它们的对比度通常很差。