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

本文详细介绍了如何使用Python的PIL库将两张PNG图像进行合成,并重点分析了RGBA图像的Alpha通道在图像合成过程中的作用。通过代码展示了如何打开并调整图像大小,以及如何通过alpha_composite()函数实现图像的透明度效果。通过实例分析得出结论:当Alpha通道值为255时,不会遮挡RGB图像;值为0时,则完全遮挡。最后,讨论了合成图像的Alpha通道特征及合成规则。
摘要由CSDN通过智能技术生成

需求

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


两张图片

原图-1.png
在这里插入图片描述
原图-2.png
在这里插入图片描述

代码如下

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
在这里插入图片描述

重点分析

通过代码分析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()))

结果

在这里插入图片描述
image_rgb-1.png
在这里插入图片描述

image_a-1.png
在这里插入图片描述

image_rgb-2.png
在这里插入图片描述

image_a-2.png
在这里插入图片描述

分析可知:
(一) 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
在这里插入图片描述

image_a-3.png
在这里插入图片描述

分析可知:

两张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的具体公式有待深入探讨

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值