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

news2025/2/3 0:03:36

什么是图像加权和?

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

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()

运行效果:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/762355.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

无缝集成:基于FastAPI实现AI模型服务与nacos的完美融合

1 场景介绍 当我们使用python构建AI模型算法的过程中,经常会遇到如下的问题: 这个模型如何提供给其他微服务调用(比如JAVA构建的微服务)?这个模型如何做到多个服务节点的负载均衡?这个模型如何做到服务的…

Python高光谱遥感数据处理与高光谱遥感机器学习方法深度应用

提供一套基于Python编程工具的高光谱数据处理方法和应用案例。 本文涵盖高光谱遥感的基础、方法和实践。基础篇,用通俗易懂的语言解释高光谱的基本概念和理论,深入理解科学原理。方法篇结合Python编程工具,专注于解决高频技术难题&#xff0c…

工欲善其事,必先利其器之—react-native-debugger调试react native应用

调试react应用通常利用chrome的inspector的功能和两个最常用的扩展 1、React Developer Tools (主要用于debug组件结构) 2、Redux DevTools (主要用于debug redux store的数据) 对于react native应用,我们一般就使用react-nativ…

C++无锁编程——无锁队列

C无锁编程——无锁队列 贺志国 2023.7.11 上一篇博客给出了最简单的C数据结构——堆栈的几种无锁实现方法。队列的挑战与栈的有些不同,因为Push()和Pop()函数在队列中操作的不是同一个地方。因此同步的需求就不一样。需要保证对一端的修改是正确的,且对…

TCP/IP网络编程 第十二章:I/O复用

基于I/O复用的服务器端 多进程服务器端的缺点和解决方法 为了构建并发服务器,只要有客户端连接请求就会创建新进程。这的确是实际操作中采用的种方案,但并非十全十美,因为创建进程时需要付出极大代价。这需要大量的运算和内存空间&#xff…

Vue列表排序

开始前先回顾一下sort排序用法&#xff1a; 定义一串数组arr&#xff0c;使用sort排序&#xff0c;会收到前后两个数据项设置两个参数a&#xff0c;b。 注意&#xff1a;a-b 是升序 b-a 是降序 a-b升序&#xff1a; <script>let arr [12,11,2,5,76,33]arr.sort((a,b…

家居商城小程序:打造舒适家居生活的优选平台

随着人们对家居生活品质的追求&#xff0c;家居商城小程序成为提供便捷购物和个性化服务的不可或缺的工具。通过家居商城小程序&#xff0c;用户可以浏览并购买各类家居商品&#xff0c;如家具、装饰品、家纺等。同时&#xff0c;家居商城小程序能提供热销商品推荐、客户评价和…

浅析高校用电问题及智慧电力监管平台的构建 安科瑞 许敏

摘 要&#xff1a;介绍了当前高校用电存在的问题&#xff0c;进行了原因分析&#xff0c;由此提出建立高校用电智慧监管平台。对高校用电智慧监管平台的构架进行设计&#xff0c;运用物联网技术&#xff0c;实现各回路实时自主控制&#xff0c;并细化管理权限&#xff0c;实现…

Swift 周报 第三十三期

文章目录 前言新闻和社区App 内购买项目和订阅即将实行价格与税率调整为家庭提供安全的 App 体验 提案正在审查的提案 Swift论坛推荐博文话题讨论关于我们 前言 本期是 Swift 编辑组自主整理周报的第二十四期&#xff0c;每个模块已初步成型。各位读者如果有好的提议&#xff…

公网访问的Linux CentOS本地Web站点搭建指南

文章目录 前言1. 本地搭建web站点2. 测试局域网访问3. 公开本地web网站3.1 安装cpolar内网穿透3.2 创建http隧道&#xff0c;指向本地80端口3.3 配置后台服务 4. 配置固定二级子域名5. 测试使用固定二级子域名访问本地web站点 前言 在web项目中,部署的web站点需要被外部访问,则…

常规函数和箭头函数之间的主要区别

常规函数和箭头函数之间的主要区别 在 JavaScript 中&#xff0c;函数是设计用于执行特定任务的代码块。函数允许使用函数将大型程序分解为多个更小、更易于管理的组件。因此&#xff0c;我们就不再需要重复编写相同的代码。 JavaScript中有两种类型的函数 常规函数箭头函数…

jmeter如何进行web脚本录制

目录 录制web脚本 &#xff08;1&#xff09;jmeter中设置HTTP代理 &#xff08;2&#xff09;浏览器中设置代理 &#xff08;3&#xff09;页面操作 &#xff08;4&#xff09;查看录制的web脚本 &#xff08;5&#xff09;脚本内容过滤 &#xff08;6&#xff09;脚本优化…

练习 数列前n项和(递归函数)

C++自学精简教程 目录(必读) 数列的前n项和 S = 1 + 2 + 3 + ...... + n 之前我们用for循环求解数列前n项和,本文用递归函数求解。 代码如下 #include <iostream> using namespace std;int f(int a) {if (a == 1){return 1;}else{return a + f(a - 1);} }int main(…

APP外包开发中的H5框架

在开发APP的技术中&#xff0c;除了原生开发外也可以使用H5框架来开发。原生开发的特点是质量高&#xff0c;用户体验更好&#xff0c;但成本高&#xff0c;适用于对质量要求高的APP项目。H5框架的特点是通用性较强&#xff0c;对开发人员的要求相对较低&#xff0c;成本也低&a…

从小众到大热:海外网红营销的成功之道

在当今数字时代&#xff0c;社交媒体已经成为人们获取信息、沟通交流的主要渠道之一。而在这个社交媒体的浪潮中&#xff0c;海外网红营销逐渐从小众走向大热。它以其独特的营销模式和广泛的受众群体&#xff0c;成为许多品牌和企业的首选营销方式。本文Nox聚星将详细介绍海外网…

高等学校节能监控平台的具体应用 安科瑞 许敏

摘要&#xff1a;高校节能监控平台&#xff0c;主要是通过物联网技术实现对水、电、气等高耗能设备进行计量和控制&#xff0c;为高校能耗的分析&#xff0c;能源流向&#xff0c;节能目标提供有力的数据支撑。高效节能监控平台主要包括能耗监测系统、照明节能控制系统、空调节…

Gtest在ARM平台上的离线搭建(让Gtest编译安装成功之后的可执行文件.so变成ARM下的—ARM aarch64)(实用篇)

编译时自动调用Cunit或者Gtest的静态或者动态库文件说明拷贝Gtest安装包到新目录下根目录下创建build目录并且进行编译检查生成的库文件是否属于ARM架构下的将库文件拷贝到统一的ARM包下面编译时自动调用Cunit或者Gtest的静态或者动态库文件说明 这里之前在usr/local/lib下面安…

Springboot工程常见错误

1. mybatis的mapper.xml出现tag name expected错误 https://blog.csdn.net/watson2017/article/details/128902300 <符号在xml配置SQL 语句中是不能直接识别出来的&#xff0c;也就是说&#xff0c;我们在使用到 > 、< 等符号的时候&#xff0c;需要将其进行转义&…

LaTex 的基本使用方法

TeXstudio 设置新建和编辑文档编译和预览拼写检查宏和脚本 LaTex 分模块详解 LaTex 文件头 documentclass article&#xff1a;用于写短篇文章、报告report&#xff1a;用于写长篇报告、学位论文、技术报告等book&#xff1a;用于编写书籍&#xff0c;具有章节、子章节和节的…

leetcode 77. 组合

2023.7.17 今天正式开始回溯系列&#xff0c;这是一道经典回溯题。 先上一个经典回溯模板&#xff1a; void backtracking(参数) {if (终止条件) {存放结果;return;}for (选择&#xff1a;本层集合中元素&#xff08;树中节点孩子的数量就是集合的大小&#xff09;) {处理节点…