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

Python:使用灰度蒙版去除图像对象并实现透明区域的问题求助

用OpenCV实现蒙版去除人物并添加透明空洞

你的代码问题在于没有给图像添加Alpha通道:原JPG是3通道BGR格式,bitwise_and操作后还是3通道,保存成PNG也不会有透明属性,黑色只是颜色替换,不是透明区域。要实现透明效果,需要给图像添加第4个Alpha通道,并通过蒙版控制透明区域。

修改后的代码如下:

import cv2
import numpy as np

# 读取原图(3通道BGR)
original_image = cv2.imread('ok/114_0175.jpg')
# 读取灰度蒙版(人物黑,其余白)
mask = cv2.imread('masks/114_0175.jpg', cv2.IMREAD_GRAYSCALE)

# 1. 将原图转为4通道BGRA格式(添加Alpha通道)
bgra_image = cv2.cvtColor(original_image, cv2.COLOR_BGR2BGRA)

# 2. 反转蒙版:原蒙版中人物是黑色(0),反转后人物区域为白色(255),其余为黑色(0)
#    Alpha通道中,0=完全透明,255=完全不透明,所以反转后把人物区域设为透明
inverted_mask = cv2.bitwise_not(mask)

# 3. 将反转后的蒙版赋值给Alpha通道
bgra_image[:, :, 3] = inverted_mask

# 4. 保存带透明通道的PNG图像
cv2.imwrite('paesaggio_con_persone_trasparenti.png', bgra_image)

关键说明:

  • Alpha通道的作用:PNG的第4个通道(Alpha)控制透明度,0表示完全透明,255表示完全不透明。
  • 蒙版反转:你的蒙版是人物区域为黑色(0),但我们需要人物区域透明,所以要反转蒙版,让人物区域对应Alpha通道的0值,其余区域为255。
  • 格式转换:必须先把3通道BGR转为4通道BGRA,否则无法保存透明属性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 13:34:53