OpenCV学习之cv2.addWeighted函数

OpenCV学习之cv2.addWeighted函数

一、简介

在图像处理和计算机视觉中,图像融合是一种常见的操作。cv2.addWeighted 函数是 OpenCV 提供的用于对两幅图像进行加权融合的函数,通过对图像像素值进行线性加权和偏移,可以实现图像的混合和过渡效果。该函数常用于图像的透明叠加、图像特效等场景。

二、语法

cv2.addWeighted 函数的基本语法如下:

cv2.addWeighted(src1, alpha, src2, beta, gamma[, dst[, dtype]]) -> dst

三、参数

  • src1:第一幅输入图像。
  • alpha:第一幅图像的权重。
  • src2:第二幅输入图像。
  • beta:第二幅图像的权重。
  • gamma:加到最终结果上的标量值。
  • dst(可选):输出图像。
  • dtype(可选):输出图像的数据类型。

四、示例

下面通过几个简单的例子来演示 cv2.addWeighted 的用法。

示例 1:基本图像加权融合
import cv2
import numpy as np

# 创建两幅简单的图像
img1 = np.zeros((300, 300, 3), dtype=np.uint8)
img1[:] = (255, 0, 0)  # 蓝色图像

img2 = np.zeros((300, 300, 3), dtype=np.uint8)
img2[:] = (0, 255, 0)  # 绿色图像

# 使用 cv2.addWeighted 进行加权融合
alpha = 0.5
beta = 0.5
gamma = 0
result = cv2.addWeighted(img1, alpha, img2, beta, gamma)

# 显示结果
cv2.imshow('Weighted Image', result)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这个例子中,我们创建了两幅简单的图像,一幅是蓝色的,另一幅是绿色的。通过 cv2.addWeighted 函数以相同的权重(0.5)对两幅图像进行融合,得到的结果图像是蓝色和绿色的混合图像。

示例 2:不同权重的图像加权融合
import cv2
import numpy as np

# 创建两幅简单的图像
img1 = np.zeros((300, 300, 3), dtype=np.uint8)
img1[:] = (255, 0, 0)  # 蓝色图像

img2 = np.zeros((300, 300, 3), dtype=np.uint8)
img2[:] = (0, 255, 0)  # 绿色图像

# 使用 cv2.addWeighted 进行加权融合
alpha = 0.7
beta = 0.3
gamma = 0
result = cv2.addWeighted(img1, alpha, img2, beta, gamma)

# 显示结果
cv2.imshow('Weighted Image', result)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这个例子中,我们对蓝色图像和绿色图像使用不同的权重(0.7 和 0.3)进行融合,得到的结果图像中蓝色的比例更高,绿色的比例较低。

示例 3:加上偏移值的图像加权融合
import cv2
import numpy as np

# 创建两幅简单的图像
img1 = np.zeros((300, 300, 3), dtype=np.uint8)
img1[:] = (255, 0, 0)  # 蓝色图像

img2 = np.zeros((300, 300, 3), dtype=np.uint8)
img2[:] = (0, 255, 0)  # 绿色图像

# 使用 cv2.addWeighted 进行加权融合,并加上偏移值
alpha = 0.5
beta = 0.5
gamma = 50  # 偏移值
result = cv2.addWeighted(img1, alpha, img2, beta, gamma)

# 显示结果
cv2.imshow('Weighted Image with Gamma', result)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这个例子中,我们在对两幅图像进行加权融合时,还加上了一个偏移值(50),结果图像的亮度整体提高了。

五、注意事项

  1. 输入图像的尺寸和类型匹配:
    • 两个输入图像 src1src2 的尺寸(宽度和高度)必须相同。如果尺寸不同,需要先进行图像的尺寸调整。
    • 输入图像的数据类型必须相同,通常是 uint8 类型(8位无符号整数)。如果数据类型不同,需要先进行数据类型转换。
  2. 权重参数的范围:
    • 权重参数 alphabeta 应该是浮点数,且通常在 0 到 1 的范围内。它们的值决定了每幅图像在融合结果中的比例。权重值的总和不一定需要为1,但如果总和大于1,可能会导致结果图像的某些像素值溢出。
  3. 偏移值 gamma 的使用:
    • 偏移值 gamma 是一个常数,会被加到融合结果的每一个像素上(相当于偏置),用于调整图像的整体亮度。gamma 可以是正数或负数,根据需要进行调整。
  4. 结果图像的数据类型:
    • 输出图像的默认数据类型与输入图像相同。如果需要更改数据类型,可以使用 dtype 参数进行指定。
  5. 输入图像的通道数:
    • 输入图像通常为三通道(RGB)图像。如果是单通道(灰度)图像,同样适用,但确保两幅输入图像的通道数相同。
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值