Python使用PIL.Image叠合两张影像教程与范例

介绍如何在 Python 中使用 PIL.Imageblend()composite() 函数以半透明的方式合并两张影像。

如果要将两张影像重叠起来,将两张影像变成半透明之后合并起来,可以使用 PIL.Image.blend() 函数来处理,以下是处理的步骤。

测试用图片

以下是本文中用来测试的两张图片。

测试图片一测试图片一
测试图片二测试图片二

更改影像大小

在合并之前,必须先确认两张影像的大小都是一致的。

from PIL import Image

# 加载两张影像
img1 = Image.open("image1.jpg")
img2 = Image.open("image2.jpg")

# 检查两张影像大小是否一致
print(img1.size)
print(img2.size)
(720, 480)
(720, 480)

如果两张影像大小不同,可以考虑使用 resize() 调整影像大小:

# 指定目标图片大小
imgSize = (720, 480)

# 改变影像大小
img1.resize(imgSize)
img2.resize(imgSize)

另一种方式是采用 crop() 函数将两张影像裁切成相同的大小:

# 指定裁切大小
cropBox = (
    0,   # left
    0,   # upper
    720, # right
    480  # lower
)

# 裁切影像
img1.crop(cropBox)
img2.crop(cropBox)

叠合影像

准备好两张相同大小的影像之后,即可使用 blend() 函数进行影像的叠合,而在叠合影像时要指定一个 alpha 值(代表透明度),blend() 函数会依照以下公式进行影像的叠合:

out = image1 * (1.0 - alpha) + image2 * alpha

以下是 alpha 指定为 0.5 的范例:

# 叠合影像
blendImg = Image.blend(img1, img2, alpha = 0.5)

# 显示影像
blendImg.show()

叠合影像叠合影像

不同的 alpha 值会有不同的效果:

# 叠合影像
blendImg = Image.blend(img1, img2, alpha = 0.3)

# 显示影像
blendImg.show()

叠合影像叠合影像

遮罩叠合影像

若要搭配遮罩来叠合两张影像,可以再另外准备好遮罩之后,改用 composite() 函数来处理。遮罩影像的格式可以是黑白图片("1")、灰阶图片("L")或含透明度的彩色图片("RGBA"),以下是产生遮罩的范例:

from PIL import ImageDraw, ImageFilter

# 产生遮罩影像
maskImg = Image.new("L", (720, 480))

# 绘制遮罩区域
maskDraw = ImageDraw.Draw(maskImg)
maskDraw.ellipse((50, 50, 470, 430), fill=255)

# 模糊化
maskImg = maskImg.filter(ImageFilter.GaussianBlur(30))

# 显示遮罩影像
maskImg.show()

遮罩影像遮罩影像

有了遮罩影像之后,即可使用 composite() 函数套用遮罩叠合影像:

# 套用遮罩叠合影像
Image.composite(img1, img2, maskImg)

套用遮罩叠合影像套用遮罩叠合影像

技术教程

Brotli无损压缩工具安装与使用教程

2022-6-23 5:57:22

技术教程

Python字串格式化教程与范例

2022-6-23 13:03:22

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 yp10086@vip.qq.com 举报,一经查实,本站将立刻删除。

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
今日签到
有新私信 私信列表
搜索