opencv 图片叠加与融合,cv2.add 与 cv2.addWeighted 的区别

相关函数
图像加法、减法、位运算
学习函数 cv2.add(),cv2.addWeighted()

详解:
使用 cv2.add() 将两个图像相加,可以使用 numpy 中的矩阵加法来实现。但是在 opencv 中加法是饱和操作,也就是有上限值,numpy 会对结果取模。

cv2.add

图像上的加法大致有两种:
1. cv2.add(): 这是一个饱和操作
2. +: 这是 Numpy 中的运算,一种模操作,res = img1 + img2

注意两幅图片的大小类型必须一致,或者第二个图像是一个标量

处理图片大小可见:[http://support.i-search.com.cn/article/1566539293820

由于两者的差别,我们一般多用 cv2.add(src1, src2)

综上,使用 opencv 的效果更好
原图:
img1:
opencv  图片叠加与融合,cv2.add 与 cv2.addWeighted 的区别

img2:
opencv  图片叠加与融合,cv2.add 与 cv2.addWeighted 的区别

img1=cv2.imread('1.jpg')
img2=cv2.imread('2.jpg')
 
res = cv2.add(img1,img2)

使用函数 cv2.add 后图片混合效果:

opencv  图片叠加与融合,cv2.add 与 cv2.addWeighted 的区别

cv2.addWeighted( 融合,可以设置图片的透明度)

实际上也是加法,只不过是按比例混合起来,有不同的权重 ,给人一种混合的或者透明的感觉
公式如下
g (x) = (1 − α)f0 (x) + αf1 (x)   #a→(0,1)不同的 a 值可以实现不同的效果

现在第一幅图像的权重是 0.7,第二幅图像的权重是 0.3,使用 cv2.addWeighted() 函数进行混合

img1=cv2.imread('1.jpg')
img2=cv2.imread('2.jpg')
 
dst=cv2.addWeighted(img1,0.7,img2,0.3,0)

混合后的结果:
opencv  图片叠加与融合,cv2.add 与 cv2.addWeighted 的区别

按位运算 (问题: 如何将一个图放到另一个图上去,加法会改变颜色,混加会透明)

位运算操作有 and, or, not, xor。在提取部分图像选择激活区域 roi 时,位运算操作十分有用。
如果使用加法,颜色会改变,如果使用混合,会变成透明,但是我们不想要透明效果,可以使用 roi 方法
(http://support.i-search.com.cn/article/1566539293820) 此链接中含 roi 方法的示例。