用 cv2 叠加两个图像结果作为噪声

Overlaying two images with cv2 results as a noise

我正在尝试混合 3 张图像。

  1. 首先,我用一些定位覆盖 photo.png over base.png。它有效。

base_photo.png

  1. 其次,我正在尝试叠加 effect.png

effect.png

上一步生成的图像。

结果是这样的

result.png

我正在使用 here 描述的 opencv 混合。我试过使用 cv2.addWeighted 但结果是一样的

# blending function
def img_overlay(background, overlay, x_offset, y_offset):
    y1, y2 = y_offset, y_offset + overlay.shape[0]
    x1, x2 = x_offset, x_offset + overlay.shape[1]

    alpha_s = overlay[:, :, 3] / 255.0
    alpha_l = 1.0 - alpha_s

    for c in range(0, 3):
        background[y1:y2, x1:x2, c] = (alpha_s * overlay[:, :, c] +
                                   alpha_l * background[y1:y2, x1:x2, c])

    return background

# First step
background = cv2.imread('base.png')
overlay = cv2.imread('photo.png', -1)
x_offset = 386
y_offset = 70
base_photo = img_overlay(background, overlay, x_offset, y_offset)

# Second step
overlay = cv2.imread('effect.png', -1)
final_photo = img_overlay(base_photo, overlay, 0, 0)

cv2.imwrite(result, final_photo) 

我如何修复 img_overlay 功能,使其能够正确覆盖 effect.png

问题是您的 'effect' 图片比例不同。通过除以 255 更正此问题。

你的 'Second Step' 应该是这样的:

# Second step
overlay = cv2.imread('effect.png', -1)
overlay = overlay / 255.0
final_photo = img_overlay(base_photo, overlay, 0, 0)

哪个适合我。