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

OpenCV读取sRGB PNG时红蓝通道交换,该归咎于imread还是fromarray?

OpenCV中sRGB PNG红蓝通道交换问题解析

嗨,作为OpenCV新手碰到这个问题真的太常见啦!我来给你把事儿说清楚:

其实这既不是imread的锅,也不是fromarray的错,本质是OpenCV和大多数图像工具的通道顺序约定不一样:

  • OpenCV的cv2.imread()函数默认会把彩色图像读取成BGR通道顺序,这是它一直以来的设计习惯;
  • 而sRGB格式(包括像PIL、matplotlib这类常用图像库)都是遵循RGB通道顺序的。

所以如果你用cv2.imread()读入sRGB PNG后,直接把数组传给依赖RGB顺序的工具(比如用fromarray配合matplotlib显示),就会出现红蓝通道颠倒的情况。

给你个简单的解决办法:读入图片后,用OpenCV自带的通道转换函数把BGR转成RGB就好啦,示例代码如下:

import cv2
import matplotlib.pyplot as plt

# 读入BGR格式的图像
img_bgr = cv2.imread("你的sRGB图片.png")
# 转换为RGB格式
img_rgb = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2RGB)
# 再用fromarray或者matplotlib显示就正常了
plt.imshow(img_rgb)
plt.show()

简单总结下:OpenCV读出来的是BGR,其他工具大多认RGB,转个通道就搞定啦!

内容的提问来源于stack exchange,提问作者dom free

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:08:25