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

  • Post category:Python

在Python中,我们可以使用OpenCV和Pillow这两个库来实现在一个图像上叠加另一个图像。

使用OpenCV叠加图像

OpenCV是一个广泛使用的计算机视觉库,它提供了丰富的图像处理功能,包括图像读取、显示、变换、过滤、分割、检测等。在OpenCV中,我们可以使用addWeighted()函数将两个图像叠加在一起。下面是一个示例代码:

import cv2

# 读取底图和要叠加的图像
img_bg = cv2.imread('bg.jpg')
img_fg = cv2.imread('fg.png')

# 将要叠加的图像调整尺寸和通道数,使其与底图相同
img_fg = cv2.resize(img_fg, (img_bg.shape[1], img_bg.shape[0]))
img_fg = cv2.cvtColor(img_fg, cv2.COLOR_BGRA2BGR)

# 叠加图像
alpha = 0.5 # 叠加的透明度
img_blend = cv2.addWeighted(img_bg, 1-alpha, img_fg, alpha, 0)

# 显示结果
cv2.imshow('Blend', img_blend)
cv2.waitKey(0)
cv2.destroyAllWindows()

上面的代码中,我们先读取了底图和要叠加的图像,然后调整了要叠加的图像的大小和通道数,使其与底图相同。接着,我们使用addWeighted()函数将两个图像叠加在一起,其中参数alpha表示叠加的透明度,0.5表示50%的透明度,一个取值范围在0~1之间的数值即可。最后,我们通过imshow()函数将结果显示出来,并用waitKey()函数等待用户按下按键后关闭窗口。

使用Pillow叠加图像

Pillow是Python中的一个图像处理库,它可以读取、处理和保存多种格式的图像文件。在Pillow中,我们可以使用Image类的blend()方法将两个图像叠加在一起。下面是一个示例代码:

from PIL import Image

# 读取底图和要叠加的图像
img_bg = Image.open('bg.jpg').convert('RGBA')
img_fg = Image.open('fg.png').convert('RGBA')

# 将要叠加的图像调整尺寸和模式,使其与底图相同
img_fg = img_fg.resize(img_bg.size)
img_fg = img_fg.convert('RGBA')

# 叠加图像
alpha = 0.5 # 叠加的透明度
img_blend = Image.blend(img_bg, img_fg, alpha)

# 显示结果
img_blend.show()

上面的代码中,我们先使用Image类的open()方法读取了底图和要叠加的图像,并使用convert()方法将它们转换为RGBA模式。接着,我们调整了要叠加的图像的大小和模式,使其与底图相同。然后,我们使用blend()方法将两个图像叠加在一起,其中参数alpha表示叠加的透明度,同样是一个取值范围在0~1之间的数值。最后,我们使用show()方法将结果显示出来。

总结

以上就是在Python中实现图像叠加的完整攻略。无论是使用OpenCV还是Pillow,都需要将要叠加的图像调整尺寸和通道数(或模式),使其与底图相同,然后使用适当的函数将它们叠加在一起。透明度(alpha)参数的取值决定了叠加的效果,可以根据需要调整。