在进行图像融合之前先解释一下, cv.add() 简单地通过 numpy 操作将两个图像相加,res = img1 + img2。两个图像应该具有相同的深度和类型,或者第二个图像可以是像素值,比如(255,255,255),白色值。
x = np.uint8([250])
y = np.uint8([10])
print(cv.add(x,y)) #250 + 10 =260 => 255
cv.addWeighted() 这也是将图像相加,但是对图像赋予不同的权重,从而给出混合感或透明感。图像按以下等式添加: 通过在(0,1)之间改变的值, 可以用来对两幅图像或两段视频产生时间上的画面叠化 (cross-dissolve)效果,可以选择不同图像赋予不同的权重,从而形成一种美化的效果。下来我们将两张图片将它们混合在一起。第一图像的权重为 0.5,第二图像的权重为 0.8。cv.addWeighted()在图像上应用以下等式:
该等式中就是描述的每个图片占比权重的处理
我们来分步进行图像融合实战
首先我们导入图片
import cv2
import numpy as np
import matplotlib.pyplot as plt
img1 = cv2.imread('./1.jpg')
img1_rgb = cv2.cvtColor(img1, cv2.COLOR_BGR2RGB)
img2 = cv2.imread('./2.jpg')
img2_rgb = cv2.cvtColor(img2, cv2.COLOR_BGR2RGB)
#这里先读取两张美女图片,然后把图片画出
plt.subplot(1,2,1)
plt.imshow(img1_rgb)
plt.subplot(1,2,2)
plt.imshow(img2_rgb)
plt.show()
效果1:
接下来我们看一下图像的尺寸
#要融合图片,那么我们应该要考虑两个图片的尺寸应该相同
print(img1_rgb.shape==img2_rgb.shape)#返回ture则为尺寸相同
#这里我们查看一下尺寸
print(img1_rgb.shape)
print(img2_rgb.shape)
#这里打印出尺寸
效果2 这里是我们打印出的尺寸
我们开始使用cv2.addWeighted()融合图像
blend = cv2.addWeighted(img1_rgb,0.5,img2_rgb,0.8,0.)
效果3
这里我们看到效果不太好,不够美化,我们尝试更改参数
blend_new = cv2.addWeighted(img1_rgb,0.26,img2_rgb,1,0.5)
plt.imshow(blend_new)#我们可以看到第一张图片淡化了,也完成了我们的图像融合
plt.show()
效果4
接下来使用cv2.add看一下效果
#这里我们再看一下第一次提到的将两个图像相加
dst = cv2.add(img1_rgb,img2_rgb)
效果图: