Opencv实验合集——实验四:图片融合
1.概念
图像融合是将两个或多个图像结合在一起,创建一个新的图像的过程。这个过程的目标通常是通过合并图像的信息来获得比单个图像更全面、更有信息量的结果。图像融合可以在许多领域中应用,包括计算机视觉、遥感、医学图像处理等。
融合的方法有很多:
-
加法融合(Additive Fusion): 将每个图像的对应像素相加。这种方法通常用于合并具有相似亮度的图像,例如红外图像和可见光图像。
-
权重融合(Weighted Fusion): 对每个图像分配一个权重,然后通过加权和的方式将它们结合在一起。权重可以根据图像的特性动态调整,以获得最佳效果。
-
最大值融合(Max Fusion): 对于每个像素,选择输入图像中具有最大值的像素。这种方法通常用于图像分割和目标检测。
-
最小值融合(Min Fusion): 对于每个像素,选择输入图像中具有最小值的像素。这种方法通常用于处理深度信息。
-
平均融合(Average Fusion): 将每个图像的对应像素取平均值。这种方法可用于平滑噪声或减小图像中的不确定性。
-
梯度域融合(Gradient Domain Fusion): 考虑图像的梯度信息,以确保融合的图像在边缘处更加平滑。这在图像合成时常用,例如在图像编辑中。
-
无缝克隆(Seamless Cloning): 将源图像的一部分融合到目标图像中,使得融合边缘平滑且无缝。这通常涉及到掩码的使用,以确定源图像的哪些区域应该被融合。
本次实验主要进行无缝克隆融合
2.有关的函数方法
cv2.seamlessClone(src, dst, mask, center, flags)
src:源图像,即希望融合到目标图像上的图像。dst:目标图像,即希望将源图像融合到的图像。mask:掩码图像,指定了源图像中哪些区域应该被融合。掩码图像必须是单通道的、与源图像尺寸相同的灰度图像。通常,白色区域表示要融合的部分,黑色区域表示不融合的部分。center:一个二元组(x, y),表示源图像在目标图像中的放置位置。flags:一个标志参数,控制克隆的方式。
flags主要分为三种克隆方式:
1.cv2.NORMAL_CLONE:
这种克隆方式表示进行常规的图像克隆,即将源图像的一部分融合到目标图像上,使得融合边缘平滑且无缝。在这种克隆方式下,函数会尽可能地保持源图像和目标图像之间的一致性,以使得融合后的图像看起来更加自然。该方法对于一般的图像融合任务通常是合适的选择。
2.cv2.MIXED_CLONE
混合克隆在处理具有半透明区域的图像时效果更好,因为它考虑了源图像的透明度信息。在混合克隆中,源图像的每个像素都以一种混合的方式与目标图像对应位置的像素相结合。这个混合考虑了源图像中像素的颜色、透明度以及目标图像中对应位置的像素颜色。这种方法使得融合的边缘更加平滑,可以更好地处理半透明和半不透明的图像区域。
3.cv2.MONOCHROME_TRANSFER
用于指定单色传输的方式。单色传输主要用于处理单通道图像的克隆,例如灰度图像。在单色传输中,源图像的单通道信息(例如亮度)被传输到目标图像的相应位置。这种方式通常用于确保源图像的强度信息在融合后得到保留。当使用到灰色图像(三通道)的时候,可以优先考虑此克隆方式
注意:此方法只接受三通道的图片
示例代码:
import cv2
import numpy as npim = cv2.imdecode(np.fromfile(r'C:\Users\xiaoou\Desktop\picture/logo.jpg',dtype=np.uint8), cv2.IMREAD_COLOR)
obj = cv2.imdecode(np.fromfile(r'C:\Users\xiaoou\Desktop\picture/baicaoshi.png',dtype=np.uint8), cv2.IMREAD_COLOR)
im = cv2.resize(im,(516,516))
obj = cv2.resize(obj,(256,64))
mask = 255 * np.ones(obj.shape,obj.dtype)#掩码,表示所有位置都可以被融合
width, height, channel = im.shape
center = (int(height/2), int(width/2))
#正常克隆方式
normal_clone = cv2.seamlessClone(obj,im,mask,center,cv2.NORMAL_CLONE)
cv2.imshow('normal_clone',normal_clone)
cv2.waitKey(0)#混合克隆方式
mix_clone = cv2.seamlessClone(obj,im,mask,center,cv2.MIXED_CLONE)
cv2.imshow('mix_clone',mix_clone)
cv2.waitKey(0)im = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
obj = cv2.cvtColor(obj, cv2.COLOR_BGR2GRAY)
im = cv2.merge((im, im, im))
obj = cv2.merge((obj, obj, obj))#将多个单通道的图像合并成一个多通道的图像#单色混合方式
MONO_clone = cv2.seamlessClone(obj,im,mask,center,cv2.MONOCHROME_TRANSFER)
cv2.imshow('MONO_clone',MONO_clone)
cv2.waitKey(0)
效果演示:



个人认为第二种方法较好,考虑的方面较多,今天这个实验可能相对来说限制较大,因为需要输入融合图像的中心位置,对于很多情况都是很难知道真正融合的位置的中心位置。
本次实验展示了图像融合(图像克隆)功能,官方文档请看OpenCV: OpenCV Tutorials
如有错误或遗漏,希望小伙伴批评指正!!!!
希望这篇博客对你有帮助!!!!
实验三:Opencv实验合集——实验三:背景减除-CSDN博客
实验四:Opencv实验合集——实验五:高动态范围-CSDN博客
相关文章:
Opencv实验合集——实验四:图片融合
1.概念 图像融合是将两个或多个图像结合在一起,创建一个新的图像的过程。这个过程的目标通常是通过合并图像的信息来获得比单个图像更全面、更有信息量的结果。图像融合可以在许多领域中应用,包括计算机视觉、遥感、医学图像处理等。 融合的方法有很多…...
Java复习
CH1 Java Fundamentals 1.1 Java Features(java特色) 1.1 Simplicity: simple grammar, rich library 简单好用: 语法简单,库文件丰富 1.2 Pure OO: everything is object! 所有程序都是对象 1.3 Security: memory access,…...
腾讯云微服务11月产品月报 | TSE 云原生 API 网关支持 WAF 对象接入
2023年 11月动态 TSE 云原生 API 网关 1、支持使用私有 DNS 解析 服务来源支持私有 DNS 解析器,用户可以添加自己的 DNS 解析器地址进行私有域名解析,适用于服务配置了私有域名的用户。 2、支持 WAF 对象接入 云原生 API 网关对接 Web 安全防火墙&…...
性能优化-待处理
1 性能优化-循环展开...
Linux: sysctl: network: ip_no_pmtu_disc,容易搞混的参数名称
这个参数的迷惑性在于双重否定,字面意思是关闭PMTU发现的功能。如果设置为1,代表关闭;如果是0,代表不关闭pmtu发现的功能。所以说明里,有disable/enable,就容易搞混。所以要甄别网上的某些博客的说明,不要被误导。 ip_no_pmtu_disc - INTEGER Disable Path MTU Discover…...
关于“Python”的核心知识点整理大全26
目录 10.3.9 决定报告哪些错误 10.4 存储数据 10.4.1 使用 json.dump()和 json.load() number_writer.py number_reader.py 10.4.2 保存和读取用户生成的数据 对于用户生成的数据,使用json保存它们大有裨益,因为如果不以某种方式进行存储…...
Axure中继器完成表格的增删改查的自定义元件(三列表格与十列表格)
目录 一、中继器 1.1 定义 1.2 特点 1.3 适用场景 二、三列表格增删改查 2.1 实现思路 2.2 效果演示 三、十列表格增删改查 3.1 实现思路 3.2 效果演示 一、中继器 1.1 定义 在Axure中,"中继器"通常指的是界面设计中的一个元素,用…...
刚clone下来的项目如何上传到新的仓库
查看当前项目的git信息 git remote -v 查看git目录上传到哪个路径下 拉下的项目如何上传到新的仓库 git clone xxxcd xxxrm -r .git 删除原有的git信息,有问题一直回车git init 初始化gitgit add . git commit -m ‘xxx’git remote add origin 远程库地址&#…...
面试题总结(十五)【ARMstm32】【华清远见西安中心】
ARM Cortex-M,Cortex-R,Cortex-A的区别和差异是什么? ARM Cortex-M,Cortex-R和Cortex-A是ARM架构下的不同处理器系列,针对不同的应用领域和需求进行了优化和设计。它们之间的区别和差异主要体现在以下几个方面: 1. 应用领域&#…...
助听器概述
助听器概述 什么是助听器? 助听器是一种放置在耳内或耳后的小型电子设备。助听器可以放大声音,使听力损失的人能够提高他们的听力和言语理解能力。 今天有许多不同类型的助听器,包括处方助听器和非处方 (OTC) 助听器…...
学习k8s
学习k8s 我为什么要用k8s 和其他部署方式的区别是什么? 传统部署方式 java --> package --> 放到服务器上 --> Tomcat 如果是同时进行写操作,会存在并发问题. 用户 --网络带宽–> 服务器 -->服务 同一个服务器上,多个服务: 网络资源的占用 内存的占用 cpu的占…...
iOS 将sdk更新到最新并为未添加版本号的三方库增加版本号
1、更新cocoapod sudo gem install cocoapods2、更新sdk pod update3、查看最新版本号 # 查看最新版本号 cat Podfile.lock4、增加版本号 将查询到的版本号添加到pod中 pod MJRefresh, 3.7.6...
Appium —— 初识移动APP自动化测试框架Appium
说到移动APP自动化测试,代表性的测试框架非Appium莫属,从今天开始我们将从APP结构解析、Appium框架学习、安卓/iOS自动化测试实战、自动遍历回归测试、自动化测试平台及持续集成,多个维度一起由浅入深的学废Appium 今天我们先来初步认识Appi…...
自助式可视化开发,ETLCloud的集成之路
自助式可视化开发 自助式可视化开发是指利用可视化工具和平台,使非技术人员能够自主创建、定制和部署数据分析和应用程序的过程。 传统上,数据分析和应用程序开发需要专业的编程和开发技能。但是,自助式可视化开发工具的出现,使…...
diffu-Distributed inference with multiple GPUs
pytorch的ddp...
在Python中使用Kafka帮助我们处理数据
Kafka是一个分布式的流数据平台,它可以快速地处理大量的实时数据。Python是一种广泛使用的编程语言,它具有易学易用、高效、灵活等特点。在Python中使用Kafka可以帮助我们更好地处理大量的数据。本文将介绍如何在Python中使用Kafka简单案例。 一、安装K…...
进程和线程和协程区别
目录 一、进程和线程 二、线程上下文切换 三、线程与协程区别 一、进程和线程 线程是可以由调度程序对立管理的最小程序指令集,而进程是程序运行的实例。 大多情况下,线程是进程的组成部分,一个进程中可以存在多个线程,这些线…...
银行测试:第三方支付平台业务流,功能/性能/安全测试方法
1、第三方支付平台的功能和结构特点 在信用方面,第三方支付平台作为中介,在网上交易的商家和消费者之间作一个信用的中转,通过改造支付流程来约束双方的行为,从而在一定程度上缓解彼此对双方信用的猜疑,增加对网上购物…...
神经网络可以计算任何函数的可视化证明
神经网络可以计算任何函数的可视化证明 对于神经网络,一个显著的事实就是它可以计算任何函数。 如下:不管该函数如何,总有神经网络能够对任何可能的输入x,输出值f(x) 即使函数有很多输入和输出࿰…...
SQL进阶理论篇(十三):数据库的查询优化器是什么?
文章目录 简介什么是查询优化器查询优化器的两种优化方式总结参考文献 简介 事务可以让数据库在增删改查的过程中,保证数据的正确性和安全性,而索引可以帮数据库提升数据的查找效率。查询优化器,则是帮助我们获取更高的SQL查询性能。 本节我…...
第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...
手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...
基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...
视觉slam十四讲实践部分记录——ch2、ch3
ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...
代码随想录刷题day30
1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...
AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别
【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而,传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案,能够实现大范围覆盖并远程采集数据。尽管具备这些优势…...
计算机基础知识解析:从应用到架构的全面拆解
目录 前言 1、 计算机的应用领域:无处不在的数字助手 2、 计算机的进化史:从算盘到量子计算 3、计算机的分类:不止 “台式机和笔记本” 4、计算机的组件:硬件与软件的协同 4.1 硬件:五大核心部件 4.2 软件&#…...
