3.2 图像加权和
所谓图像加权和,就是在计算两幅图像的像素值之和时,将每幅图像的权重考虑进来,可以用公式表示为:
dst=saturate(src1×α+src2×β+γ)
式中,saturate()表示取饱和值(最大值)。图像进行加权和计算时,要求src1和src2必须大小、类型相同,但是对具体是什么类型和通道没有特殊限制。它们可以是任意数据类型,也可以有任意数量的通道(灰度图像或者彩色图像),只要二者相同即可。
OpenCV中提供了函数cv2.addWeighted(),用来实现图像的加权和(混合、融合),该函数的语法格式为:
dst=cv2.addWeighted(src1, alpha, src2, beta, gamma)
其中,参数alpha和beta是src1和src2所对应的系数,它们的和可以等于1,也可以不等于1。该函数实现的功能是dst = src1×alpha + src2×beta + gamma。需要注意,式中参数gamma的值可以是0,但是该参数是必选参数,不能省略。可以将上式理解为“结果图像=图像1×系数1+图像2×系数2+亮度调节量”。
【例3.4】使用数组演示函数cv2.addWeighted()的使用。
根据题目要求,编写程序如下:
1. import cv2 2. import numpy as np 3. img1=np.ones((3,4), dtype=np.uint8)*100 4. img2=np.ones((3,4), dtype=np.uint8)*10 5. gamma=3 6. img3=cv2.addWeighted(img1,0.6, img2,5, gamma) 7. print(img3)
本例中的各行代码功能如下。
● 第3行生成一个3×4大小的、元素数值都是100的二维数组,对应一个灰度图像img1。
● 第4行生成一个3×4大小的、元素数值都是10的二维数组,对应一个灰度图像img2。
● 第5行将调节亮度参数gamma的值设置为3。
● 第6行计算“img1×0.6+img2×5+3”的混合值。
运行程序,得到如下运行结果:
[[113 113 113 113] [113 113 113 113] [113 113 113 113]]
【例3.5】使用函数cv2.addWeighted()对两幅图像进行加权混合,观察处理结果。
根据题目要求,编写程序如下:
import cv2 a=cv2.imread("boat.bmp") b=cv2.imread("lena.bmp") result=cv2.addWeighted(a,0.6, b,0.4,0) cv2.imshow("boat", a) cv2.imshow("lena", b) cv2.imshow("result", result) cv2.waitKey() cv2.destroyAllWindows()
本程序使用cv2.addWeighted()函数,对图像boat和图像lena分别按照0.6和0.4的权重进行混合。
运行程序,得到如图3-2所示的结果,其中:
● 左图是原始图像boat。
● 中间的图是原始图像lena。
● 右图是图像boat和图像lena加权混合后的结果图像。
图3-2 【例3.5】程序的运行结果
【例3.6】使用函数cv2.addWeighted()将一幅图像的ROI混合在另外一幅图像内。
根据题目要求,编写程序如下:
import cv2 lena=cv2.imread("lena512.bmp", cv2.IMREAD_UNCHANGED) dollar=cv2.imread("dollar.bmp", cv2.IMREAD_UNCHANGED) cv2.imshow("lena", lena) cv2.imshow("dollar", dollar) face1=lena[220:400,250:350] face2=dollar[160:340,200:300] add=cv2.addWeighted(face1,0.6, face2,0.4,0) dollar[160:340,200:300]=add cv2.imshow("result", dollar) cv2.waitKey() cv2.destroyAllWindows()
在本例中,face1是图像lena中的面部部分,face2是图像dollar中的面部部分。通过函数cv2.addWeighted()将lena图像内的面部face1与dollar图像内的面部face2进行了混合计算。
运行程序,会得到如图3-3所示的结果,其中:
● 左图是原始图像lena。
● 中间的图是原始图像dollar。
● 右图是图像lena的面部与图像dollar的面部加权混合得到的图像。
图3-3 图像加权混合结果