使用OpenCV和Python覆盖两个图像而不丢失颜色的强度

2024-06-02 05:27:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我怎样才能覆盖两个图像而不失去两个图像的颜色强度。

我有图像1和图像2:

  1. enter image description here2。enter image description here

我试着使用0.5alpha和beta,但它给了我一个颜色强度为一半的合并图像

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

enter image description here

但当我尝试同时使用1到alpha和beta通道时,它只给我合并的区域。

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

enter image description here

我必须得到这样的输出。

enter image description here


Tags: 图像alpha区域颜色cv2betadstimg1
1条回答
网友
1楼 · 发布于 2024-06-02 05:27:27

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

dst = src1*alpha + src2*beta + gamma

也就是说,当你用alpha来乘你的3D数组图像时,你就是在乘所有的项。例如,对于一个蓝色像素,你有[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

相关问题 更多 >