在Python中将图像叠加在另一个图像上
将一幅图像覆盖在另一幅图像上是指将一幅图像的图像数据复制到另一幅图像上的过程。叠加也可以指其他类型的图像处理方法,例如叠加相似的图像以进行降噪、混合等。但现在,我们将专注于前一种。在本文中,我们将学习如何使用图像处理将一个图像叠加在另一个图像之上。
所需模块:
Pillow: Python Imaging Library(PIL 的扩展)是Python语言Python的图像处理包。它结合了用于编辑、创建和保存图像的轻量级图像处理工具。
pip install pillow
出于演示目的,我们将使用以下图像作为主图像。
示例 1:覆盖 alpha 图像。
如果我们将包含透明区域的图像叠加在不透明图像上,那么最终图像中只会出现叠加图像的不透明区域。像素可能不是完全不透明的,因此可能具有模拟不透明度(alpha 通道)。这种类型的叠加是主要的,因为它允许无缝混合图像。
为了覆盖图像,我们将使用枕头库中的paste()函数。
Syntax: paste(self, im, box=None, mask=None)
Pastes another image into this image.
Parameters:
- im: Source image or pixel value (integer or tuple).
- box: An optional 4-tuple giving the region to paste into. If a 2-tuple is used instead, it’s treated as the upper left corner. If omitted or None, the source is pasted into the upper left corner.
- mask: An optional mask image.
为了演示,我们将覆盖以下图像:
下面是实现:
Python3
from PIL import Image
# Opening the primary image (used in background)
img1 = Image.open(r"BACKGROUND_IMAGE_PATH")
# Opening the secondary image (overlay image)
img2 = Image.open(r"OVERLAY_IMAGE_PATH")
# Pasting img2 image on top of img1
# starting at coordinates (0, 0)
img1.paste(img2, (0,0), mask = img2)
# Displaying the image
img1.show()
Python3
from PIL import Image
img1 = Image.open(r"BACKGROUND_IMAGE_PATH")
img2 = Image.open(r"OVERLAY_IMAGE_PATH")
# No transparency mask specified,
# simulating an raster overlay
img1.paste(img2, (0,0))
img1.show()
输出:
解释:
首先我们打开主图像并将其图像对象保存到变量img1中。然后我们打开将用作叠加层的图像并将其图像对象保存到变量img2中。然后我们调用 paste 方法在img1上覆盖/粘贴传递的图像。第一个参数是img2 ,它是包含透明文本的图像的图像对象。此图像将用于叠加。第二个参数是一个大小为 2 的元组,表示img1的坐标,应该粘贴img2的位置。由于它是 (0, 0),因此第二个图像将粘贴在img1的左上角。第三个参数是img2 ,它被传递给掩码参数。它将为img2指定透明度蒙版。最后我们展示了图像。
示例 2:覆盖非 alpha 图像
如果我们将完全不透明的图像叠加在不透明图像的顶部,则叠加图像的所有像素值都会保留在最终图像中。在此过程中,背景图像的像素值会在此过程中丢失(在覆盖图像占据的区域)。
我们将使用以下图像作为叠加图像:
下面是实现:
蟒蛇3
from PIL import Image
img1 = Image.open(r"BACKGROUND_IMAGE_PATH")
img2 = Image.open(r"OVERLAY_IMAGE_PATH")
# No transparency mask specified,
# simulating an raster overlay
img1.paste(img2, (0,0))
img1.show()
输出:
解释:
代码与前一个大致相同,因此我们只对更改后的代码感兴趣。在 paste 方法调用中,我们省略了 mask 参数,这允许没有透明掩码用于覆盖。因此,图像只是简单地复制粘贴到img1上。由于img2的像素值按原样复制,因此输出图像中也存在白色背景。它为查看者提供了一个线索,即由于最终图像中发现突然的颜色变化(当叠加图像包含透明区域时,这种情况会得到缓解),因此在没有过多考虑最终图像质量的情况下修改了图像。