使用 OpenCV 和 Python 叠加两个图像而不丢失颜色强度

Mon*_*ino 5 python opencv image

如何叠加两个图像而不损失两个图像的颜色强度。

我有图像1和图像2:

  1. 在此输入图像描述2.在此输入图像描述

我尝试使用 0.5 alpha 和 beta,但它给我的合并图像的颜色强度只有一半

dst = cv2.addWeighted(img1,0.5,img2,0.5,0)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

但是当我尝试对 alpha 和 beta 通道使用 1 时,它只提供合并区域。

 dst = cv2.addWeighted(img1,1,img2,1,0)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我必须得到如下所示的输出。

在此输入图像描述

Kas*_*mvd 6

实际上dst是根据以下公式创建的:

dst = src1*alpha + src2*beta + gamma
Run Code Online (Sandbox Code Playgroud)

也就是说,当您将实际上是 3D 数组的图像与alpha您相乘时,您将所有项目相乘。例如,对于您拥有的蓝色像素[255, 0, 0]和白色像素[255, 255, 255],当您将矩阵相加在一起时,如果您希望结果为蓝色,您应该将白色像素转换为 0,这实际上是黑色(从物理学观点哈哈)。您可以简单地使用高级 numpy 索引找到白色像素,然后将它们转换为零。

import cv2    

img1 = cv2.imread('img1.png')
img2 = cv2.imread('img2.png')

img1[img1[:, :, 1:].all(axis=-1)] = 0
img2[img2[:, :, 1:].all(axis=-1)] = 0

dst = cv2.addWeighted(img1, 1, img2, 1, 0)

cv2.imshow('sas', dst)
cv2.waitKey(0)
cv2.destroyAllWindows()
Run Code Online (Sandbox Code Playgroud)

结果:

在此输入图像描述