一般彩色图有RGB三个通道,而透明背景的PNG图片有四个通道,这第四个通道就是alpha通道,其每个位置指示当前是否属于背景区域,取值为0代表背景,否则就是前景区域。所以可以计算出对应图片的Mask
转载链接 具体python代码如下
import cv2
import numba
from PIL import Image
# 带numba加速计算,请安装numba
# pip install numba
@numba.jit
def png2mask(img):
shape = img.shape
width = shape[0]
height = shape[1]
for y in range(height):
for x in range(width):
color = img[x, y]
if color[3] == 0:
img[x, y] = [0, 0, 0, 255]
else:
img[x, y] = [255, 255, 255, 255]
return img
if __name__ == '__main__':
img = cv2.imread('rmbg.png', -1)
img_copy = img.copy()
result = png2mask(img_copy)
image = Image.fromarray(result)
# 转8位位深度
image = image.convert('L')
image.save('rmbg_mask.png')
image.show()