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

运行效果:

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

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

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

相关文章

C# Linq 详解二

目录 概述 七、OrderBy 八、OrderByDescending 九、Skip 十、Take 十一、Any 十二、All C# Linq 详解一 1.Where 2.Select 3.GroupBy 4.First / FirstOrDefault 5.Last / LastOrDefault C# Linq 详解二 1.OrderBy 2.OrderByDescending 3.Skip 4.Take 5.Any 6.All C#…

arm day2

汇编实现1到100的累加 .text .global _start_start:mov r0,#0loop:add r0,#1add r1,r0cmp r0,#100blne loopstop:b stop结果为0x13ba等于5050

python的魔法函数

一、介绍 在Python中,魔法函数是以双下划线__开头和结尾的特殊函数。它们在类定义中用于实现特定的行为,例如运算符重载、属性访问、迭代等。 以下是一些常见的Python魔法函数: __init__: 这是一个特殊的构造函数,在创建类的实例…

Web_php_include

代码审计 进入环境&#xff0c;根据题目的提示&#xff0c;本题考察文件包含漏洞 <?php show_source(__FILE__); echo $_GET[hello]; $page$_GET[page]; while (strstr($page, "php://")) {$pagestr_replace("php://", "", $page); } incl…

解决Ruoyi单体版本集成Echarts多图表时在Tab模式下不展示问题

目录 背景 一、Tab拆分后无法展示 1、环境简介 2、原始报表功能说明 3、tab切分遇到的问题 二、问题分析及解决 1、问题分析 2、问题解决 3、初始化时图表渲染 4、Tab切换时重渲 总结 背景 最近在使用ruoyi的单体化版本进行Echarts多图表展示时遇到一个问题&#xff0c;r…

苍穹外卖day03——菜品管理业务代码开发

目录 公共字段自动填充——问题分析和实现思路 公共字段自动填充——代码实现(1) 公共字段自动填充——代码实现完善(2) 新增菜品——需求分析与设计 产品原型 ​编辑 接口设计 ​编辑 数据库设计 新增菜品——代码开发1(文件上传接口) 配置文件 Controller层代码 前后…

Net HTTP 概述

Net HTTP 概述 状态码字段Get/Post HTTP (HyperText Transfer Protocol) : 超文本传输协议 超文本 : 比文本更丰富传输 : 双方通信协议 : 双方的约定 状态码 200 : OK , 一切成功302 : 临时重定向 , 访问另一个 URL404 : 服务器不存在该 URL502 : 网关 , 代理错误503 : 当前…

Java经典面试解析:服务器卡顿、CPU飙升、接口负载剧增

01 线上服务器CPU飙升&#xff0c;如何定位到Java代码 解决这个问题的关键是要找到Java代码的位置。下面分享一下排查思路&#xff0c;以CentOS为例&#xff0c;总结为4步。 第1步&#xff0c;使用top命令找到占用CPU高的进程。 第2步&#xff0c;使用ps –mp命令找到进程下…

el-table合并单元格

1. 代码 <template><div><el-table border :span-method"arraySpanMethod" :data"tableData" style"width: 100%"><el-table-column prop"date" label"日期" width"180"></el-table-…

无线电音频-BPA600蓝牙协议分析仪名词解析

1 介绍 2 Baseband基带分析 (1)Delta 是什么含义? "Delta" 有多个含义,取决于上下文。以下是常见的几种含义: 希腊字母:Delta&#x

Linux(centos7)下安装mariadb10详解

MariaDB 和 MySQL 之间存在紧密的关系。 起源&#xff1a;MariaDB 最初是作为 MySQL 的一个分支而创建的。它的初始目标是保持与 MySQL 的兼容性&#xff0c;并提供额外的功能和性能改进。 共同的代码基础&#xff1a;MariaDB 使用了 MySQL 的代码基础&#xff0c;并在此基础上…

Docker 常用命令

docker命令大全 命令说明docker attach将本地标准输入、输出和错误流附加到正在运行的容器docker build从 Dockerfile 构建镜像docker builder管理构建docker checkpoint管理检查点docker commit从容器的更改中创建新图像docker config管理 Docker 配置docker container管理容器…

HTML <menuitem> 标签

实例 包含不同 <menuitem> 元素的上下文菜单: <menu type="context" id="mymenu"><menuitem label="Refresh" οnclick="window.location.reload();" icon="ico_reload.png"></menuitem><men…

【机器学习】特征工程 - 文本特征提取TfidfVectorizer

「作者主页」:士别三日wyx 「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」:对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 文本特征提取 一、特征提取API二、提取特征三、转成数组四、特征名字五、转回原始数…

如何清除视频和照片中水印的几种方式

文章目录 如何清除视频和照片中水印的几种方式一、清除视频中水印的几种方式1、截除水印区域2、模糊水印区域3、使用人工智能技术工具3.1 通过【iMyFone-MarkGo[^1]】消除水印3.2 通过【嗨格式视频转换器[^2]】消除水印3.3 通过【PR 视频编辑器】消除水印3.4 通过 【美图秀秀】…

TensorFlow和PyTorch各有哪些优缺点呢?入门学习该如何选择呢?

TensorFlow和PyTorch是两个广泛应用于深度学习的开源框架&#xff0c;它们各自具有一些优点和缺点。下面是它们的主要特点&#xff1a; TensorFlow的优点&#xff1a; 高度灵活&#xff1a;TensorFlow提供了更底层的操作和控制&#xff0c;可以对模型的细节进行更精确的调整和…

微服务系列文章之 Nginx负载均衡

1、七层负载均衡 1、说明 Nginx要实现七层负载均衡需要用到proxy_pass代理模块配置。Nginx默认安装支持这个模块&#xff0c;我们不需要再做任何处理。Nginx的负载均衡是在Nginx的反向代理基础上把用户的请求根据指定的算法分发到一组【upstream虚拟服务池】。 2、要用到的指…

【Linux】网络基础之UDP协议

目录 &#x1f308;前言&#x1f338;1、传输层&#x1f33a;2、重谈端口号&#x1f368;2.1、端口号范围划分&#x1f367;2.2、认识知名端口号 &#x1f340;3、UDP协议&#x1f368;3.1、UDP协议报文结构&#x1f369;3.2、UDP协议的特点&#x1f36a;3.3、基于UDP的应用层协…

openwrt 阿里云盘webdav 转成 samba4挂载

需要rclone 与samba4-server rclone 吧webdav挂载到openwrt的某个目录下。 然后通过samba-server 挂载出去。 安装rclone sudo -v ; curl https://rclone.org/install.sh | sudo bash 安装fuse opkg install fuse-utils 软连接 ln -s /usr/bin/fusermount /usr/bin/fuse…

【Kubernetes运维篇】RBAC之创建集群用户管理K8S

文章目录 一、创建zhangsan集群用户赋予uat名称空间管理员权限二、创建lisi集群用户赋予查看所有名称Pod权限 需求&#xff1a;公司新入职两位运维同事&#xff0c;分别是zhangsan、lisi&#xff0c;刚入职肯定不能给K8S管理员权限&#xff0c;所以需要创建两个系统账号&#x…