使用python库叠加图像

时间:2011-08-07 18:45:43

标签: python

我想使用Python库动态地将一个图像叠加到另一个图像上,并且想知道哪个图像易于使用。

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

通常PIL(Python Imaging Library)用于图像处理。

答案 1 :(得分:1)

如果要叠加两个图像,只需使用OpenCV库。

[样本]

enter image description here

enter image description here 这是使用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)

调整了结果图像的大小以减小其体积,但是在上面的代码中,省略了调整大小的代码。

结果:

enter image description here

更新!

这是使用图像的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

结果:

enter image description here