使用OpenCV对图像进行融合处理,选取两张美女图片进行cv2.add,和cv2.addWeighted处理实战

在进行图像融合之前先解释一下, 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()在图像上应用以下等式:

q(x)=(1-\alpha) f_{0}(x)+\alpha f_{1}(x)

该等式中就是描述的每个图片占比权重的处理

我们来分步进行图像融合实战

首先我们导入图片

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)

效果图:

猜你喜欢

转载自blog.csdn.net/weixin_51672245/article/details/130370941