You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

cv2加载灰度图出现蓝黄色偏、通道异常,如何获取正常1通道灰度图?

问题根因

你的异常由两个错误导致:

  1. 参数混用:cv2.IMREAD_GRAYSCALE是cv2.imread()的读取模式参数,不能作为颜色转换码传入cv2.cvtColor(),参数错误才会输出不符合预期的多通道结果
  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 12:24:11