Python混合连接图像

时间:2017-12-05 20:36:07

标签: python python-3.x opencv pillow blending

我正在使用Python和PIL来连接两个图像并尝试移除附加的边界或接缝,以获得更平滑自然的图像,而不会产生任何伪影。

def merge_images(image1, image2, mask):

    img1 = Image.open(image1)
    img2 = Image.open(image2)
    mask = Image.open(mask).convert('RGBA')

    #mask.show()

    height = img1.size[1] + (img2.size[1])
    width = img1.size[0]

    print(height , width)

    #height = img1.size[1]
    #width = img1.size[0]+(img2.size[0]/2)

    print(height - img1.size[1])

    newImage = Image.new("RGB", (width, height), (0,0,0))
    newImage.paste(img1, (0 , (height - img1.size[1])))
    #newImage.show()
    print(newImage.size)
    #newImage.paste(img1, ((width-img1.size[0]),0))
    newImage.paste(img2, (0 ,0), mask)

    return newImage

这是从Blend Images

引用的

这是上述链接的预期输出:Expected Output

我没有得到相同的结果,并且在连接的图像结果中有相当多的接缝。

来源:

Image1

Image 2

Result

结果远离原版。我希望删除附加区域中的接缝以及顶部图像底部的阴影。我猜这个问题是在掩盖中。任何建议都非常有用

编辑:错过添加蒙版图像 Mask Image

1 个答案:

答案 0 :(得分:1)

这是我创建的一个示例,演示了如何使用alpha蒙版混合两个图像。对于所有输入,大多数导入注释widthheight都应该相同。图像附在信号源上,因此可以正确复制。

核心思想是,您将lion图像的像素与alpha相乘,并使用rest将其与taj图像相乘。这称为weighted blending

enter image description here

import cv2
import numpy as np

lion = cv2.imread('lion.png',3)
taj = cv2.imread('taj.png',3)
alpha = cv2.imread('mask.png',0).astype(np.float32)


a_B, a_G, a_R = cv2.split(lion)
b_B, b_G, b_R = cv2.split(taj)

b = (a_B * (alpha/255.0)) + (b_B * (1.0 - (alpha/255.0)))
g = (a_G * (alpha/255.0)) + (b_G * (1.0 - (alpha/255.0)))
r = (a_R * (alpha/255.0)) + (b_R * (1.0 - (alpha/255.0)))
output = cv2.merge((b,g,r))


cv2.imwrite("lionoutput.png", output) 
  

<强>泰

enter image description here

  

<强>狮子

enter image description here

  

<强>掩模

enter image description here