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

OpenCV叠加透明背景图片出现黑色背景的解决方案问询

问题原因

你出现黑色背景的核心原因是cv2.imread默认读取图片时会丢弃透明Alpha通道,只返回3通道BGR数据,眼镜素材里原本透明的区域会被默认填充为0值(也就是黑色),直接赋值覆盖到人物图上就会显示黑色背景。

正确实现步骤

  • 读取图片时添加cv2.IMREAD_UNCHANGED参数,保留眼镜素材的Alpha通道
  • 将眼镜数据拆分为RGB色彩通道和Alpha透明度通道,把Alpha通道归一化到0~1范围作为融合权重
  • 按Alpha权重对人物图对应区域和眼镜图做加权融合,而非直接覆盖赋值

修正后可运行代码

import cv2
from PIL import Image

# 读取人物图,BGR转RGB
img = cv2.imread('pers.png')[...,::-1]
img2 = img.copy()

# 读取眼镜图,保留Alpha通道,BGRA转RGBA
glasses = cv2.imread('glasses.png', cv2.IMREAD_UNCHANGED)[...,[2,1,0,3]]
h, w = glasses.shape[:2]
# 拆分色彩通道和Alpha通道
glasses_rgb = glasses[...,:3]
alpha = glasses[...,3:] / 255.0  # 透明度归一化到0-1

# 提取人物图要叠加眼镜的区域
roi = img2[2:2+h, 4:4+w]
# 按透明度权重融合两张图
merged_roi = glasses_rgb * alpha + roi * (1 - alpha)
# 转成8位整型后赋值回原图
img2[2:2+h, 4:4+w] = merged_roi.astype('uint8')

im = Image.fromarray(img2)
im.save("resume.png")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 19:36:04