2024-06-02 05:27:27 发布
网友
我怎样才能覆盖两个图像而不失去两个图像的颜色强度。
我有图像1和图像2:
我试着使用0.5alpha和beta,但它给了我一个颜色强度为一半的合并图像
dst = cv2.addWeighted(img1,0.5,img2,0.5,0)
但当我尝试同时使用1到alpha和beta通道时,它只给我合并的区域。
dst = cv2.addWeighted(img1,1,img2,1,0)
我必须得到这样的输出。
实际上,dst是根据以下公式创建的:
dst
dst = src1*alpha + src2*beta + gamma
也就是说,当你用alpha来乘你的3D数组图像时,你就是在乘所有的项。例如,对于一个蓝色像素,你有[255, 0, 0]和白色[255, 255, 255],当你把矩阵加在一起时,如果你想得到蓝色的结果,你应该把白色像素转换成实际上是黑色的0(从物理学的角度看,这是没有意义的)。您可以使用高级numpy索引找到白色像素,然后将它们转换为零。
alpha
[255, 0, 0]
[255, 255, 255]
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()
结果:
实际上,
dst
是根据以下公式创建的:也就是说,当你用
alpha
来乘你的3D数组图像时,你就是在乘所有的项。例如,对于一个蓝色像素,你有[255, 0, 0]
和白色[255, 255, 255]
,当你把矩阵加在一起时,如果你想得到蓝色的结果,你应该把白色像素转换成实际上是黑色的0(从物理学的角度看,这是没有意义的)。您可以使用高级numpy索引找到白色像素,然后将它们转换为零。结果:
相关问题 更多 >
编程相关推荐