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

标签 python opencv blending

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

  1. 首先我覆盖photo.pngbase.png有一些定位。它有效。

base_photo.png

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

effect.png

在上一步的结果图像上。

结果是这样的

result.png

我正在使用描述的 opencv 混合 here .我尝试使用 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

最佳答案

问题是您的“效果”图像比例不同。通过除以 255 来更正此问题。

您的“第二步”应该如下所示:

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

这对我有用。

关于python - 用 cv2 叠加两个图像结果作为噪声,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58718523/

相关文章:

python - 如何通过索引访问集合元素?

python - 从大型存储库到文件的关键字匹配

opencv - 仅在 HSV 系统中访问 V channel

opengl - 使用 Alpha 到 FBO 渲染位图图层

python - 如何在 Anaconda(Windows)中升级 OpenCV?

opencv - 在已知基线的情况下估计给定另一台摄像机的姿态

c++ - Opencv mat截断所有双项

css - Web 上下文中的颜色混合选项(乘法)?

opengl - 渐变色文本

python - 深度学习中哪些算法可以验证列到矩阵的关系