opencv将图像转换为灰度,并使用matplotlib显示奇怪的颜色

opencv将图像转换为灰度,并使用matplotlib显示奇怪的颜色,opencv,matplotlib,Opencv,Matplotlib,在使用opencv加载图像、转换为灰度并使用matplotlib打印时,我发现了一个奇怪之处: from matplotlib import pyplot as plt import argparse import cv2 image = cv2.imread("images/image1.jpg") image = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY) plt.imshow(image) 就这么简单 但它给出了如下“灰度”图: 有什么问题吗?非常感

在使用opencv加载图像、转换为灰度并使用matplotlib打印时,我发现了一个奇怪之处:

from matplotlib import pyplot as plt
import argparse
import cv2

image = cv2.imread("images/image1.jpg")
image = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)
plt.imshow(image)
就这么简单

但它给出了如下“灰度”图:

有什么问题吗?非常感谢!

这是因为Matplotlib映射单通道输出的方式。它默认为“感知一致的”颜色映射:蓝色->黄色;有点像你可能期望热图从蓝色变成红色,但理论上对人类的视觉来说更清晰

这里有一些更详细的信息可能会有所帮助:

在显示图像时,您需要告诉它使用灰色颜色贴图:

plt.imshow(arr, cmap='gray')
另见这个问题:


编辑:另外,请参阅关于混合RGB和BGR的答案

OpenCV以BGR的顺序读取图像,因此您应该转换

image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
其次,您看到的是Matplotlib,它将图像强度显示为热图。只需将所需的颜色映射传递给它的
cmap
参数

plt.imshow(image, cmap=plt.cm.gray)

在BGR和RGB上有一个好地方——我太专注于彩色地图了,甚至没有注意到这一点!说得好!许多感谢者不知道我们可以直接链接到答案:)。信息量很大。非常感谢!