PIL的alpha_composite方法实现人像换背景

需求

将一张人物图像贴到指定图片上


两张图片

原图-1.png
PIL的alpha_composite方法实现人像换背景_第1张图片
原图-2.png
PIL的alpha_composite方法实现人像换背景_第2张图片

代码如下

img1 = Image.open('原图-1.png')
img2 = Image.open('原图-2.png')
img2 = img2.resize((1280, 720))
big = Image.alpha_composite(img1, img2)
big.save('big.png')

结果展示

big.png
PIL的alpha_composite方法实现人像换背景_第3张图片

重点分析

通过代码分析RGBA图像

代码

img1 = Image.open('原图-1.png')
print("img1 模式:", img1.mode)
print("img1 尺寸:", img1.size)
print("img1 通道数:", len(img1.split()))
r,g,b,a = img1.split()
image_rgb = Image.merge("RGB", (r,g,b))
image_rgb.save('image_rgb-1.png')
a.save('image_a-1.png')
print('img1 通道a有哪些值:', set(np.array(a).flatten().tolist()))
print('*'*50)

img2 = Image.open('原图-2.png')
img2 = img2.resize((1280, 720))
print("img2模式:", img2.mode)
print("img2尺寸:", img2.size)
print("img2通道数:", len(img2.split()))
r,g,b,a = img2.split()
image_rgb = Image.merge("RGB", (r,g,b))
image_rgb.save('image_rgb-2.png')
a.save('image_a-2.png')
print('img2通道a有哪些值:', set(np.array(a).flatten().tolist()))

结果

PIL的alpha_composite方法实现人像换背景_第4张图片
image_rgb-1.png
PIL的alpha_composite方法实现人像换背景_第5张图片

image_a-1.png
PIL的alpha_composite方法实现人像换背景_第6张图片

image_rgb-2.png
PIL的alpha_composite方法实现人像换背景_第7张图片

image_a-2.png
PIL的alpha_composite方法实现人像换背景_第8张图片

分析可知:
(一) alpha通道像素值全为255时,对RGB图像完全没有遮挡; alpha通道像素值全为0时,完全遮挡了RGB图片(图片遮挡部分呈白色);

例如图片img2
观察img2图片,可以看到非人物地方(背景)是白色的,观察图片img2图片的alpha通道图像image_a-2.png,可以看到在图像image_a-2.png中非人物地方(背景)是黑色的,可以得知,alpha通道为0时,完全遮挡了image_rgb-2.png中的非人物地方(背景)区域;

观察img2图片中的人物区域,同时观察图片img2图片的alpha通道图像image_a-2.png人物区域,可以得知,alpha通道为255时,对image_rgb-2.png中的人物地方没有影响;

即可证明上述结论

通过代码分析alpha_composite()函数

代码

img3 = Image.open('big.png')
print("img3 模式:", img3.mode)
print("img3 尺寸:", img3.size)
print("img3 通道数:", len(img3.split()))
r,g,b,a = img3.split()
image_rgb = Image.merge("RGB", (r,g,b))
image_rgb.save('image_rgb-3.png')
a.save('image_a-3.png')
print('img1 通道a有哪些值:', set(np.array(a).flatten().tolist()))
print('*'*50)

结果

在这里插入图片描述

image_rgb-3.png
PIL的alpha_composite方法实现人像换背景_第9张图片

image_a-3.png
PIL的alpha_composite方法实现人像换背景_第10张图片

分析可知:

两张png图片合成要求:img1和img2都是RGBA图像(四通道图像),同时在进行alpha_composite组合时,必须保证img1和img2图片尺寸一致;

合成后的图片img3.png的alpha通道(image_a-3.png)全部像素值为255,对img3完全没有遮挡;
image_a-2.png图像像素值为0的位置,在合成的img.png图像是,该位置的rgb值采用image_rgb-1.png对应位置的像素值
image_a-2.png图像像素值为255的位置,在合成的img.png图像是,该位置的rgb值采用image_rgb-2.png对应位置的像素值

PIL的alpha_composite的具体公式有待深入探讨

你可能感兴趣的:(图像处理)