当前位置: 首页 > news >正文

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.lryc.cn/news/263549.html

相关文章:

  • Java复习
  • 腾讯云微服务11月产品月报 | TSE 云原生 API 网关支持 WAF 对象接入
  • 性能优化-待处理
  • Linux: sysctl: network: ip_no_pmtu_disc,容易搞混的参数名称
  • 关于“Python”的核心知识点整理大全26
  • Axure中继器完成表格的增删改查的自定义元件(三列表格与十列表格)
  • 刚clone下来的项目如何上传到新的仓库
  • 面试题总结(十五)【ARMstm32】【华清远见西安中心】
  • 助听器概述
  • 学习k8s
  • iOS 将sdk更新到最新并为未添加版本号的三方库增加版本号
  • Appium —— 初识移动APP自动化测试框架Appium
  • 自助式可视化开发,ETLCloud的集成之路
  • diffu-Distributed inference with multiple GPUs
  • 在Python中使用Kafka帮助我们处理数据
  • 进程和线程和协程区别
  • 银行测试:第三方支付平台业务流,功能/性能/安全测试方法
  • 神经网络可以计算任何函数的可视化证明
  • SQL进阶理论篇(十三):数据库的查询优化器是什么?
  • 视觉SLAM中的相机分类及用途
  • Gin之GORM多表关联查询(多对多;自定义预加载SQL)
  • linux 调试工具 GDB 使用
  • qt程序在Linux下打包的一般流程
  • 华为鸿蒙应用--欢迎页SplashPage+倒计时跳过(自适应手机和平板)-ArkTs
  • spring MVC概述和土门案例(无配置文件开发)
  • 持续集成交付CICD:K8S 通过模板文件自动化完成前端项目应用发布
  • 【TB作品】51单片机 实物+仿真-电子拔河游戏_亚博 BST-M51
  • MyBatis ${}和#{}区别
  • 大型语言模型:RoBERTa — 一种稳健优化的 BERT 方法
  • webpack知识点总结(基础应用篇)