opencv 轻松入门 面向python pdf_面向Python的OpenCV轻松入门——第三章(2)

本文介绍了OpenCV中的图像加权和概念,利用cv2.addWeighted()函数进行图像混合,并通过三个示例详细说明了如何操作,包括数组示例、两幅图像加权混合以及图像ROI的混合应用。
摘要由CSDN通过智能技术生成

3.2图像加权和

 所谓图像加权和,就是在计算两幅图像的像素值之和时,将每幅图像的权重考虑进来,可以用公式表示为:

式中, saturate()表示取饱和值(最大值)。图像进行加权和计算时,要求sre1和src2必须大小、 类型相同,但是对具体是什么类型和通道没有特殊限制。它们可以是任意数据类型,也可以有任意数量的通道(灰度图像或者彩色图像),只要二者相同即可。

 Opencv中提供了函数cv2.addWeighted(),用来实现图像的加权和(混合、融合),该函数 的语法格式为:

dst=cv2.addWeighted(srcl, alpha, src2, beta, gamma)

其中,参数 alpha和beta是 srcl和srce2所对应的系数,它们的和可以等于1,也可以不等于1.该函数实现的功能是。需要注意,式中参数 gamma的值 可以是0,但是该参数是必选参数,不能省略。可以将上式理解为“结果图像=图像1×系数1+图像2×系数2+亮度调节量”。

例3.4】使用数组演示函数cv2. add Weighted的使用

根据题目要求,编写程序如下

1. import cv2
2. import numpy as np
3. img=np.ones((3, 4), dtype=np.uint8)*100
4. img=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行生成一个3x4大小的、元素数值都是100的二维数组,对应一个灰度图像img1

  • 第4行生成一个3x4大小的、元素数值都是10的二维数组,对应一个灰度图像img2.

  • 第5行将调节亮度参数 gamma的值设置为3.

  • 第6行计算“imgl×0.6+img2x5+3”的混合值。

运行程序,得到如下运行结果:

[[113 113 113 113]
[113 113 113 113]
[113 113 113 113]]

【例3.5】使用函数cv2.addWeighted()对两幅图像进行加权混合,观察处理结果。

根据题目要求,编写程序如下:

 import cv2
a=cv2.imread("C://Users//25708//Pictures//picture//1 (1059).jpg")
b=cv2.imread("C://Users//25708//Pictures//picture//1 (1055).jpg")
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加权混合后的结果图像。
cb02273486b8cc126fe4b47fb2545ffe.png
【例3.5】程序的运行结果

【例3.6】使用函数cv2.addWeighted()将一幅图像的ROI混合在另外一幅图像内。

根据题目要求,编写程序如下:

import cv2
lena=cv2.imread("C://Users//25708//Pictures//picture//1 (1050).jpg", cv2.IMREAD_UNCHANGED)
dollar=cv2.imread ("C://Users//25708//Pictures//picture//1 (1066).jpg", 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()

在本例中, facel是图像lena中的面部部分,face2是图像 dollar中的面部部分。通过函数cv2.addWeighted()将lena图像内的面部 facel与 dollar图像内的面部face2进行了混合计算。

运行程序,会得到如图3-3所示的结果,其中:

  • 左图是原始图像lena
  • 中间的图是原始图像 dollar
  • 右图是图像lena的面部与图像 dollar的面部加权混合得到的图像。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值