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
相关产品推荐
相关产品推荐

