OpenCV读取灰度图存变量后Matplotlib绘图显绿色问题求助
解决Matplotlib显示OpenCV灰度图呈绿色调的问题
问题根源
你读取的图像确实是单通道灰度图,但Matplotlib的imshow默认使用viridis彩色配色方案渲染单通道数据,这才导致图像看起来发绿,和你读取灰度图的方式无关。
直接解决方案
在imshow函数中指定灰度配色参数cmap='gray',同时建议加上vmin=0, vmax=255锁定灰度值映射范围(匹配8位图像的0-255区间),修改后的代码如下:
img = cv2.imread(path, 0) fig, axs = plt.subplots(figsize=(5,5)) # 核心修改:添加灰度配色与范围参数 axs.imshow(img, cmap='gray', vmin=0, vmax=255) axs.set_axis_off() plt.show()
为什么之前的尝试无效?
你用cv2.imread(path, cv2.IMREAD_GRAYSCALE)或cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)的方式,已经正确将图像转为单通道灰度图了——可以通过打印print(img.shape)验证,输出应为(图像高度, 图像宽度)(无第三个通道维度)。问题完全出在Matplotlib的显示环节,而非图像读取/转换步骤。
内容的提问来源于stack exchange,提问作者Ezhill Ragesh
相关产品推荐
相关产品推荐

