OpenCV 中提供了函数 cv2.addWeighted(),用来实现图像的加权和(混合、融合),该函数 的语法格式为:
dst=cv2.addWeighted(src1, alpha, src2, beta, gamma)
- 其中,参数alpha和beta是src1和src2所对应的系数,它们的和可以等于1,也可以不等于1。
- 该函数实现的功是dst=src1alpha+src2beta+gamma。gamma的值可以是0,但是必须有值,不可以省略。
- 可以理解为“结果图像=图像1系数1+图像2系数2+亮度调节量”
【例 3.4】使用数组演示函数 cv2.addWeighted()的使用。】
import cv2
import numpy as np
img1 = np.ones((3,4),dtype=np.uint8)*100
img2 = np.ones((3,4),dtype=np.uint8)*10
print("img1=\n",img1)
print("img2=\n",img2)
img3 = cv2.addWeighted(img1,0.6,img2,5,gamma=3)
print("img3=\n",img3)
【例 3.5】使用函数 cv2.addWeighted()对两幅图像进行加权混合,观察处理结果。
a = cv2.imread("/Users/zhaofeier/Desktop/源代码及图像/chapter3/boat.bmp")
b = cv2.imread("/Users/zhaofeier/Desktop/源代码及图像/chapter3/lena.bmp")
result = cv2.addWeighted(a,0.6,b,0.4,0)
cv2.imshow("a",a)
cv2.imshow("b",b)
cv2.imshow("result",result)
cv2.waitKey()
cv2.destroyAllWindows()
【例 3.6】使用函数 cv2.addWeighted()将一幅图像的 ROI 混合在另外一幅图像内。
lena = cv2.imread("/Users/zhaofeier/Desktop/lena512.bmp",-1)
dollar = cv2.imread("/Users/zhaofeier/Desktop/dollar.bmp",-1)
cv2.imshow("lena",lena)
cv2.imshow("dollar",dollar)
face1 = lena[220:400,250:350]
face2 = dollar[160:340,200:300]
result = cv2.addWeighted(face1,0.6,face2,0.4,0)
dollar[160:340,200:300] = result
cv2.imshow("result",dollar)
cv2.waitKey()
cv2.destroyAllWindows()