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

时间:2016-08-31 12:53:48

标签: python image opencv

如何在不丢失两幅图像颜色强度的情况下叠加两幅图像。

我有Image1和Image2:

  1. enter image description here 2. enter image description here
  2. 我尝试使用0.5 alpha和beta,但它给了我一个合并的图像,颜色强度的一半

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

    enter image description here

    但是当我尝试在alpha和beta频道上使用1时,它只会给我合并的区域。

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

    enter image description here

    我必须得到一个看起来像这样的输出。

    enter image description here

1 个答案:

答案 0 :(得分:2)

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

dst = src1*alpha + src2*beta + gamma

其中说当你将实际上是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()

结果:

enter image description here