opencv将图像转换为灰度,并使用matplotlib显示奇怪的颜色
在使用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) 就这么简单 但它给出了如下“灰度”图: 有什么问题吗?非常感
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上有一个好地方——我太专注于彩色地图了,甚至没有注意到这一点!说得好!许多感谢者不知道我们可以直接链接到答案:)。信息量很大。非常感谢!