我正在使用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
我没有得到相同的结果,并且在连接的图像结果中有相当多的接缝。
来源:
结果远离原版。我希望删除附加区域中的接缝以及顶部图像底部的阴影。我猜这个问题是在掩盖中。任何建议都非常有用
编辑:错过添加蒙版图像 Mask Image
答案 0 :(得分:1)
这是我创建的一个示例,演示了如何使用alpha蒙版混合两个图像。对于所有输入,大多数导入注释width
和height
都应该相同。图像附在信号源上,因此可以正确复制。
核心思想是,您将lion
图像的像素与alpha相乘,并使用rest
将其与taj
图像相乘。这称为weighted blending
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)
<强>泰强>
<强>狮子强>
<强>掩模强>