在Python中把一个图像叠加在另一个图像上

在Python中把一个图像叠加在另一个图像上

叠加一个图像是指将一个图像的数据复制到另一个图像上的过程。叠加也可以指其他类型的图像处理方法,如叠加类似的图像进行降噪,混合等。但现在,我们将集中讨论前一种方法。在这篇文章中,我们将学习如何用图像处理方法在另一图像上叠加一个图像。

需要的模块:

Pillow: Python Imaging Library(PIL的扩展)是Python语言事实上的图像处理包。它集成了轻量级的图像处理工具,用于编辑、创建和保存图像。

pip install pillow

出于示范目的,我们将使用以下图像作为主图像。

在Python中把一个图像叠加在另一个图像上

例子1:叠加一个alpha图像。

如果我们在一个不透明的图像上叠加一个包含透明区域的图像,那么在最终的图像中,只有被叠加的图像的不透明区域会出现。像素可能不是完全不透明的,因此可以有模拟不透明度(alpha通道)。这种类型的叠加是最主要的,因为它可以使图像无缝地混合在一起。

为了覆盖图像,我们将使用pillow库中的paste()函数。

语法: paste(self, im, box=None, mask=None)

将另一个图像粘贴到这个图像中。

参数:

  • im:源图像或像素值(整数或元组)。
  • box:一个可选的4元组,给出要粘贴的区域。如果用一个2元组代替,它将被视为左上角。如果省略或没有,源文件将被粘贴到左上角。
  • mask: 一个可选的遮罩图像。

为了演示,我们将叠加以下图片:

在Python中把一个图像叠加在另一个图像上

以下是实现情况:

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()

输出:

在Python中把一个图像叠加在另一个图像上

解释:

首先,我们打开主图像并将其图像对象保存到变量img1。然后我们打开将被用作覆盖的图像,并将其图像对象保存到变量img2中。然后我们调用粘贴方法,将传递的图像覆盖/粘贴在img1上。第一个参数是img2,它是包含透明文本的图像对象。这张图片将被用于叠加。第二个参数是一个大小为2的元组,表示img1的坐标,img2应该被粘贴在那里。因为它是(0, 0),所以第二张图片将被粘贴在img1的左上方。第三个参数是img2,它被传递给mask参数。它将为img2指定透明度掩码。最后,我们显示了图像。

例子2:叠加非阿尔法图像

如果我们将一个完全不透明的图像叠加在一个不透明的图像上,被叠加图像的所有像素值都会保留在最终的图像中。在这个过程中,背景图像的像素值会在这个过程中丢失(在被覆盖的图像占据的区域)。

我们将使用以下图像作为覆盖图像。

在Python中把一个图像叠加在另一个图像上

以下是实现情况:

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()

输出:

在Python中把一个图像叠加在另一个图像上

解释:

这段代码与前面的基本相同,所以只有改变后的代码是我们感兴趣的。在粘贴方法的调用中,我们省略了mask参数,这使得覆盖层没有使用透明度掩码。因此,图像被简单地复制粘贴到img1上。由于img2的像素值被原样复制,白色背景也出现在输出的图像中。这给观看者提供了一个线索,即由于在最终图像中发现了突然的颜色变化,图像被修改了,而没有过多考虑最终图像的质量(当覆盖的图像包含透明区域时,这种情况会有所缓解)。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

Python pil