cv2加载灰度图出现蓝黄色偏、通道异常,如何获取正常1通道灰度图?
问题根因
你的异常由两个错误导致:
- 参数混用:
cv2.IMREAD_GRAYSCALE是cv2.imread()的读取模式参数,不能作为颜色转换码传入cv2.cvtColor(),参数错误才会输出不符合预期的多通道结果 - matplotlib显示逻辑:
plt.imshow()对单通道数组默认使用伪彩色映射(默认值为viridis),不会自动启用灰度映射,因此会出现蓝黄色偏
正确实现方案
方案1:先读取彩色图再转灰度
# 读取原始BGR格式图像 img = cv2.imread(file) # 用正确的转换码转单通道灰度图 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) print(gray.shape) # 输出格式为(高度, 宽度),仅单通道 # 显示时指定灰度映射 plt.imshow(gray, cmap='gray') plt.show()
方案2:直接读取为单通道灰度图
# 用灰度模式参数直接读取,得到的就是单通道数组 img = cv2.imread(file, cv2.IMREAD_GRAYSCALE) print(img.shape) # 输出格式为(高度, 宽度) # 指定灰度映射即可正常显示 plt.imshow(img, cmap='gray') plt.show()
额外说明
你最初的彩色图读取代码存在不规范问题:cv2.imread()的第二个参数是读取模式flag,你传入的cv2.COLOR_BGR2RGB是颜色转换码,不属于合法的读取参数,只是两者枚举值巧合一致才没报错,正确的彩色图适配plt显示的写法为:
img = cv2.imread(file) plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB)) plt.show()
内容的提问来源于stack exchange,提问作者john
相关产品推荐
相关产品推荐

