我有以下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)
我将其转换为灰度图像 imGray
imGray = cv2.cvtColor(imRGB, cv2.COLOR_BGR2GRAY)
imGray.shape
>>(128L, 128L)
#plotting
plt.imshow(imGray)
问题:为什么灰度图像imGray
以彩色显示?
答案 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。如果您的阵列数据不符合以下描述之一,则需要重新缩放比例。
...
伪彩色可以用作增强对比度并更轻松地可视化数据的有用工具。当使用投影仪演示数据时,这特别有用-它们的对比度通常很差。