opencv -10 基础运算之 图像加权和(图像融合&图像修复&视频合成)

什么是图像加权和?

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

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+亮度调节量”

应用场景

以下是一些常见的应用场景,可以使用图像加权:

**图像融合:**将两张图像按照一定权重进行加权融合,可以实现图像混合、渐变过渡和图像叠加效果。这在图像编辑、艺术设计和特效制作中常用于创建创意效果和过渡效果。

**图像修复:**在图像修复和恢复任务中,可以使用图像加权来合并原始图像和修复图像,以实现缺失区域的修复。通过适当的权重调整,可以使修复区域与周围图像保持平滑过渡,以获得更自然的修复结果。

**图像混合:**图像加权可用于将多张图像进行混合,以实现多重曝光效果、平均图像、透明效果和图像融合等。这在摄影、艺术和图像处理中常用于创造独特的视觉效果和风格。

**视频合成:**在视频编辑和合成中,图像加权可以用于将多个视频帧进行混合,以实现过渡效果、特殊效果和图像合成。通过调整权重,可以控制视频帧之间的平滑过渡和融合效果。

图像加噪处理:通过将原始图像与带有噪声的图像进行加权,可以实现图像降噪和去噪效果。通过调整权重,可以控制噪声的减少程度,从而改善图像的质量和清晰度。

这些只是图像加权的一些常见应用场景,实际上,图像加权在图像处理、计算机视觉和图像合成等领域中具有广泛的应用。通过调整权重和选择合适的图像,可以实现多种创造性和实用的效果。

使用数组演示函数 cv2.addWeighted()的使用。

import numpy as np
import cv2
img1=np.ones((3,4),dtype=np.uint8)*100
img2=np.ones((3,4),dtype=np.uint8)*10
gamma=3
img3=cv2.addWeighted(img1,0.6,img2,5,gamma)
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]]

对数组的操作没有直观的效果,下面我们拿两张图片就行加权和的操作看看效果

示例原图

在这里插入图片描述

在这里插入图片描述

import cv2
a=cv2.imread("hai.png")
b=cv2.imread("lena.png")
result=cv2.addWeighted(a,0.6,b,0.4,0)
cv2.imshow("dahai",a)
cv2.imshow("lena",b)
cv2.imshow("result",result)
cv2.waitKey()
cv2.destroyAllWindows()

发现报错:
在这里插入图片描述
原因是两张图片的大小不一致导致,因为操作加权和 前面有讲到 大小必须一致,我们重新对图片大小设置一下,resize

import cv2
a=cv2.imread("hai.png")

# 重新设置图像大小
resized_image = cv2.resize(a, (512, 512))

print(resized_image.shape)
b=cv2.imread("lena.png")
print(b.shape)
result=cv2.addWeighted(resized_image,0.6,b,0.4,0)
cv2.imshow("dahai",resized_image)
cv2.imshow("lena",b)
cv2.imshow("result",result)
cv2.waitKey()
cv2.destroyAllWindows()

运行效果:

在这里插入图片描述
本程序使用 cv2.addWeighted()函数,对图像 hai和图像 lena 分别按照 0.6 和 0.4 的权重进
行混合。
运行程序,得到如图 3-2 所示的结果,其中:
 左图是原始图像 hai。
 中间的图是原始图像 lena。
 右图是图像 hai 和图像 lena 加权混合后的结果图像。

反思:如果我们不使用图像加权和,而是使用add 函数是什么效果呢,我们来看看

import cv2
a=cv2.imread("hai.png")

# 重新设置图像大小
resized_image = cv2.resize(a, (512, 512))

print(resized_image.shape)
b=cv2.imread("lena.png")
print(b.shape)
result=cv2.add(resized_image,b)
cv2.imshow("dahai",resized_image)
cv2.imshow("lena",b)
cv2.imshow("result",result)
cv2.waitKey()
cv2.destroyAllWindows()

运行效果:

在这里插入图片描述
从效果看明显 图像加权和的效果好多了

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小海聊智造

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值