【问题标题】:Python blending concatenated ImagesPython混合级联图像
【发布时间】:2018-05-19 14:57:37
【问题描述】:

我正在使用 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

【问题讨论】:

  • 你的问题是什么
  • 如果我添加更多链接和描述,我会收到格式不正确的代码错误。试图弄清楚
  • 在您显示的代码中,函数merge_images 没有主体,并且函数外部有一个return 语句。也许你应该修复你的缩进,这在 Python 中很重要。
  • 我没有收到语法错误,当我粘贴它时会发生这种情况,如果我尝试格式化它,我会遇到同样的错误。现在已经一个小时了!
  • 粘贴代码,选择代码,按Ctrl+K(或上面带有{ }的按钮)。

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


【解决方案1】:

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

核心思想是,将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) 

泰姬陵

狮子

面具

【讨论】:

  • 非常感谢您提供清晰详细的示例。我试图达到的结果类似于我在上面的帖子中给出的 reddit 链接。我的问题是缝合图像,如果有其他匹配的功能堆叠或无缝连接它们。在reddit链接中,合并后,目标图像的大小是原图的两倍,并且没有明显的接缝,这就是我正在尝试的结果(即)垂直堆叠两个图像,没有任何显示区域或边界的接缝
  • 顺便说一句,这不是我帖子的答案,因为我的情况与作为答案给出的不同,但是感谢您提供详细信息
  • 我认为从这里开始的想法应该非常简单?到目前为止没有运气?
  • @user1767754 我怎样才能制作这样的面具,以不同的方向或不同的变化率?
  • @mLstudent33 我用 Photoshop 创建了它,但你可以使用像 angrytools.com/gradient/image 这样的渐变生成器