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

cap*_*nst 4 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)
Run Code Online (Sandbox Code Playgroud)

就这么简单。

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

哪里不对了 ?非常感谢! 在此处输入图片说明

n00*_*dle 5

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

这里有更多细节可能会有所帮助:https : //matplotlib.org/users/colormaps.html

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

plt.imshow(arr, cmap='gray')
Run Code Online (Sandbox Code Playgroud)

另请参阅此问题:使用 matplotlib 将图像显示为灰度

编辑:另外,请参阅lightalchemist关于混合 RGB 和 BGR回答!


lig*_*ist 5

OpenCV 按照 BGR 的顺序读取图像,因此您应该进行转换

image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
Run Code Online (Sandbox Code Playgroud)

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

plt.imshow(image, cmap=plt.cm.gray)
Run Code Online (Sandbox Code Playgroud)