我想使用Python库动态地将一个图像叠加到另一个图像上,并且想知道哪个图像易于使用。
感谢您的帮助!
答案 0 :(得分:2)
通常PIL(Python Imaging Library)用于图像处理。
答案 1 :(得分:1)
如果要叠加两个图像,只需使用OpenCV库。
[样本]
这是使用OpenCV覆盖image1和image2的示例python代码
import cv2
import numpy as np
def overlay(image1, image2, x, y):
image1_gray = cv2.cvtColor(image1, cv2.COLOR_BGR2GRAY)
_, contours, _ = cv2.findContours(image1_gray, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
image1_mask = np.zeros_like(image1)
cv2.drawContours(image1_mask, contours, -1, (255,255,255), -1)
idx = np.where(image1_mask == 255)
image2[y+idx[0], x+idx[1], idx[2]] = image1[idx[0], idx[1], idx[2]]
return image2
if __name__ == '__main__':
grass_img = cv2.imread('grassland.jpg')
horse_img = cv2.imread('horse.png')
overlayed = overlay(horse_img, grass_img, 300, 300)
cv2.imwrite('overlayed.png', overlayed)
调整了结果图像的大小以减小其体积,但是在上面的代码中,省略了调整大小的代码。
结果:
这是使用图像的Alpha值的代码,输出比以前更好。
这个想法来自overlay a smaller image on a larger image python OpenCv
def better_overlay(image1, image2, x, y):
image1_alpha = image1[:, :, 3] / 255.0
height, width = image1.shape[0], image1.shape[1]
for c in range(3):
image2[y:y+height, x:x+width, c] = image1_alpha * image1[:, :, c] + (1.0 - image1_alpha)* image2[y:y+height, x:x+width, c]
return image2
结果: