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

使用cv2.imread/Image.fromarray处理PNG图偏蓝,求颜色还原方案

问题原因

OpenCV的cv2.imread()默认将彩色图像以BGR通道顺序存储,而PIL的Image.fromarray()要求输入为RGB通道顺序的数组,通道顺序不匹配导致颜色错位,出现偏蓝现象。

解决方案

方案一:转换通道顺序后再用PIL处理

修改代码,将OpenCV读取的BGR图像转为RGB后再传给PIL:

import cv2
from PIL import Image

img = cv2.imread("image.png")
# 把BGR通道转换为RGB
img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
crop = img_rgb[1280:, 2250:2730]
cropped_rendered_image = Image.fromarray(crop)
cropped_rendered_image.save("newImageName.png")

方案二:全程使用PIL处理(更简洁)

如果不需要OpenCV的其他功能,直接用PIL完成读取和裁剪,避免通道兼容问题:

from PIL import Image

img = Image.open("image.png")
# 裁剪参数格式为(左边界, 上边界, 右边界, 下边界),对应原代码的裁剪范围
crop = img.crop((2250, 1280, 2730, img.height))
crop.save("newImageName.png")

针对带透明通道的PNG

如果原图是带透明通道的RGBA格式,需要处理BGRA转RGBA:

import cv2
from PIL import Image

# 读取包含透明通道的图像
img = cv2.imread("image.png", cv2.IMREAD_UNCHANGED)
# 将BGRA通道转换为RGBA
img_rgba = cv2.cvtColor(img, cv2.COLOR_BGRA2RGBA)
crop = img_rgba[1280:, 2250:2730]
cropped_rendered_image = Image.fromarray(crop)
cropped_rendered_image.save("newImageName.png")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 16:01:30