Opencv实验合集——实验四:图片融合

1.概念

图像融合是将两个或多个图像结合在一起,创建一个新的图像的过程。这个过程的目标通常是通过合并图像的信息来获得比单个图像更全面、更有信息量的结果。图像融合可以在许多领域中应用,包括计算机视觉、遥感、医学图像处理等。

融合的方法有很多:

  1. 加法融合(Additive Fusion): 将每个图像的对应像素相加。这种方法通常用于合并具有相似亮度的图像,例如红外图像和可见光图像。

  2. 权重融合(Weighted Fusion): 对每个图像分配一个权重,然后通过加权和的方式将它们结合在一起。权重可以根据图像的特性动态调整,以获得最佳效果。

  3. 最大值融合(Max Fusion): 对于每个像素,选择输入图像中具有最大值的像素。这种方法通常用于图像分割和目标检测。

  4. 最小值融合(Min Fusion): 对于每个像素,选择输入图像中具有最小值的像素。这种方法通常用于处理深度信息。

  5. 平均融合(Average Fusion): 将每个图像的对应像素取平均值。这种方法可用于平滑噪声或减小图像中的不确定性。

  6. 梯度域融合(Gradient Domain Fusion): 考虑图像的梯度信息,以确保融合的图像在边缘处更加平滑。这在图像合成时常用,例如在图像编辑中。

  7. 无缝克隆(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博客

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

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

相关文章

Docker 核心技术

Docker 定义:于 Linux 内核的 Cgroup,Namespace,以及 Union FS 等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术,由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器Docke…

系统设计架构——互联网案例

Netflix 的技术栈 移动和网络:Netflix 采用 Swift 和 Kotlin 来构建原生移动应用。对于其 Web 应用程序,它使用 React。 前端/服务器通信:Netflix 使用 GraphQL。 后端服务:Netflix 依赖 ZUUL、Eureka、Spring Boot 框架和其他技术。 数据库:Netflix 使用 EV 缓存、Cas…

uni-app内容

1. 应用生命周期 - **onLaunch:** 应用初始化时触发,全局只执行一次,例如在刷新任务或项目重启时。 - **onShow:** 从后台进入前台触发,即当应用从编辑器或其他地方进入浏览器页面时。 - **onHide:** 从前台进入后台时触发。 - **onError:** …

关于“Python”的核心知识点整理大全25

目录 10.3.4 else 代码块、 10.3.5 处理 FileNotFoundError 异常 alice.py 在这个示例中,try代码块引发FileNotFoundError异常,因此Python找出与该错误匹配的 except代码块,并运行其中的代码。最终的结果是显示一条友好的错误消息&#x…

云计算:FusionCompute 通过 FreeNAS 添加SAN存储

目录 一、实验 1.环境准备 2.FusionCompute添加CNA 3.在存储中创建LUN资源映射给CNA节点 3.添加存储资源关联CNA主机节点 4.扫描存储资源 5.将存储设备添加为数据存储 二、问题 1.FusionCompute中存储如何分类 2.存储资源与存储设备有何区别 3.FusionCompute支持哪些…

线上环境如何正确配置 Django 的 DEBUG?

Author:rab Django Version:3.2 Python Version:3.9 目录 前言一、DEBUG True二、DEBUG False三、页面异常解决总结 前言 由于最近在学习 Django 的知识,于是尝试开发了一套 Blog 系统,在本地测试时是页面显示没问题…

Centos上的默认文本编辑器vi的操作方法积累

打开一个文本后,常见的操作方法积累如下: 001-进入或退出插入模式的方法 按下 i 进入插入模式。 按下 Esc 退出插入模式。 002-进入命令模式的方法: 按下 Esc 退出插入模式,然后输入冒号:进入命令模式。 003-退出vi编辑器的方…

零刻EQ12 N100 2.5G双网口 All In One新手教程

零刻EQ12 N100 2.5G双网口 All In One新手教程 前言1.硬件配置2.准备工作2.1. ESXI8.0U2镜像2.2. Rufus磁盘工具下载2.3. ikuai镜像下载2.4. StarWindConverter虚拟磁盘格式转换工具下载2.5. OpenWrt镜像下载2.6. 黑群晖RR引导镜像下载(DSM7.2)2.7. 需要准备的硬件2.8. 格式化需…

【ArcGIS微课1000例】0081:ArcGIS指北针乱码解决方案

问题描述: ArcGIS软件在作图模式下插入指北针,出现指北针乱码,如下图所示: 问题解决 下载并安装字体(配套实验数据包0081.rar中获取)即可解决该问题。 正常的指北针选择器: 专栏介绍&#xff…

C函数生成一个与文本字符串相对应的字体矩阵

以下是一个使用C语言生成一个与文本字符串相对应的字体矩阵的示例代码&#xff1a; #include <stdio.h> #include <stdlib.h> // 定义字体矩阵结构体 typedef struct { int width; // 字体矩阵的宽度 int height; // 字体矩阵的高度 char* data; …

【复杂网络分析与可视化】——通过CSV文件导入Gephi进行社交网络可视化

目录 一、Gephi介绍 二、导入CSV文件构建网络 三、图片输出 一、Gephi介绍 Gephi具有强大的网络分析功能&#xff0c;可以进行各种网络度量&#xff0c;如度中心性、接近中心性、介数中心性等。它还支持社区检测算法&#xff0c;可以帮助用户发现网络中的群组和社区结构。此…

设计模式——0前言目录

1 设计模式介绍 应当站在产品经理的角度来学习设计模式 是软件设计中常见问题的典型解决方案&#xff0c;可用于解决代码中反复出现的设计问题 学习效果一般的原因在于自己没有站在产品经理的角度学习&#xff0c;仅仅是为了学习怎么实现&#xff0c;用什么算法实现。 分类&…

IO第6天

实现AB进程对话 A进程发送一句话后&#xff0c;B进程接收到打印。然后B进程发送一句话&#xff0c;A进程接收后打印b。重复上述步骤。直到AB接收或者发送完quit后&#xff0c;结束AB进程 使用消息队列实现 //A文件 #include <myhead.h>struct msgbuf{long mtype;char mt…

neo4j-Py2neo使用

neo4j-Py2neo(一)&#xff1a;基本库介绍使用 py2neo的文档地址&#xff1a;https://neo4j-contrib.github.io/py2neo/ py2neo的本质是可以采用两种方式进行操作&#xff0c;一种是利用cypher语句&#xff0c;一种是使用库提供的DataTypes&#xff0c;Data类的实例需要和远程…

pycharm运行正常,但命令行执行提示module不存在的多种解决方式

问题描述 在执行某个测试模块时出现提示&#xff0c;显示自定义模块data不存在&#xff0c;但是在PyCharm下运行正常。错误信息如下&#xff1a; Traceback (most recent call last):File "/run/channelnterface-autocase/testcases/test_chanel_detail.py", line 2…

JavaSE学习笔记 Day20

JavaSE学习笔记 Day20 个人整理非商业用途&#xff0c;欢迎探讨与指正&#xff01;&#xff01; 上一篇 文章目录 JavaSE学习笔记 Day20十七、数据结构与算法17.1算法17.1.1冒泡排序17.1.2选择排序17.1.3插入排序17.1.4三个排序的区别 17.2顺序表17.2.1顺序表代码实现17.2.2顺…

蜘点云原生之 KubeSphere 落地实践过程

作者&#xff1a;池晓东&#xff0c;蜘点商业网络服务有限公司技术总监&#xff0c;从事软件开发设计 10 多年&#xff0c;喜欢研究各类新技术&#xff0c;分享技术。 来源&#xff1a;本文由 11 月 25 日广州站 meetup 中讲师池晓东整理&#xff0c;整理于该活动中池老师所分享…

npm login报错:Public registration is not allowed

npm login报错:Public registration is not allowed 1.出现场景2.解决 1.出现场景 npm login登录时,出现 2.解决 将自己的npm镜像源改为npm的https://registry.npmjs.org/这个&#xff0c;解决&#xff01;

Android Studio 显示前进后退按钮

在写代码的过程中我们经常需要快速定位到先前或者往后的代码位置&#xff0c;可以使用Alt左右箭头 但是新安装的Android Studio工具栏上是没有显示左右箭头的工具按钮的&#xff0c;需要我们设置将Toolbar显示出来 View-Appearance-Toolbar 勾选即可 显示后

Qt窗体常用属性设置

01 显示屏尺寸&#xff1a; QDesktopWidget 获取系统屏幕大小 QDesktopWidget* pDesktopWidget QApplication::desktop();//获取可用桌面大小 QRect deskRect QApplication::desktop()->availableGeometry(); //获取主屏幕分辨率 QRect screenRect QApplication::deskt…