OpenCV——图像融合
OpenCV——图像融合
- 一、引言
- 1.1 图像融合分类
- 二、C++代码实现
- 三、效果展示
- 3.1 标准球
- 3.2 铝制底座
一、引言
在许多计算机视觉应用中(例如机器人运动和医学成像),需要将来自多幅图像的相关信息集成到一幅图像中。这种图像融合将提供更高的可靠性、准确性和数据质量。
多视图融合可以提高图像的分辨率,同时恢复场景的 3D 表示。多模态融合结合了来自不同传感器的图像,称为多传感器融合。其主要应用包括医学图像、监控和安全,
1.1 图像融合分类
工程师根据融合完成的阶段,在三个级别执行图像融合(image日 fusion)。
像素级图像融合。这种图像融合方法处于较低级别,且易于执行。它包含两个输入图像的特征并生成平均的单个结果图像。
特征级图像融合。它从多个来源对图像特征(大小、颜色)进行校正,从而在特征提取后生成增强图像。
基于块(区域)的图像融合。这是一项高级技术。它采用多阶段表示并根据区域计算测量值。
图像融合的层级划分图:

二、C++代码实现
#include <vector>
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>#include <iostream>using namespace std;
using namespace cv;
int main()
{cv::Mat image1;cv::Mat image2;cv::Mat image3;cv::Mat image4;image1 = cv::imread("D:\\***\\1.bmp");image2 = cv::imread("D:\\***\\2.bmp");image3 = cv::imread("D:\\***\\3.bmp");image4 = cv::imread("D:\\***\\4.bmp");if (!image1.data)return 0;if (!image2.data)return 0;// 合并图像cv::Mat image5;cv::Mat image6;cv::Mat image7;//cv::addWeighted 用于将两张图像(image1 和 image2)按指定的权重(0.7 和 0.9)进行加权融合,结果存储在 image3 中。cv::addWeighted(image1, 1, image2, 1, 0., image5); //亮度调整:gamma 设为 0.,表示不调整整体亮度。//cv::namedWindow("Image3", 0);//cv::imshow("Image3", image3);cv::addWeighted(image3, 1, image4, 1, 0., image6);cv::addWeighted(image5, 0.7, image6, 0.9, 0., image7);//cv::namedWindow("Image7", 0);//cv::imshow("Image7", image7);/* 新增二值化操作开始 */cv::Mat binaryImage; 方法1:全局阈值法(适合光照均匀的图像)double thresholdValue = 68; // 初始阈值设为128(可根据实际情况调整)double maxValue = 255; // 二值化后的最大值cv::threshold(image7, // 输入图像binaryImage, // 输出二值图像thresholdValue, // 阈值maxValue, // 超过阈值时设置的值cv::THRESH_BINARY // 二值化类型);// 定义结构元素(核)int erosion_size = 3; // 腐蚀核大小(奇数)cv::Mat kernel = cv::getStructuringElement(cv::MORPH_RECT, // 矩形结构元素cv::Size(2 * erosion_size + 1, 2 * erosion_size + 1),cv::Point(erosion_size, erosion_size));// 腐蚀操作cv::Mat erodedImage;cv::erode(binaryImage, erodedImage, kernel,cv::Point(-1, -1), // 锚点位置(默认中心)1); // 迭代次数
// 膨胀操作(使用相同的核)cv::Mat dilatedImage;cv::dilate(erodedImage, dilatedImage, kernel,cv::Point(-1, -1),1);// 显示结果(可选)//cv::namedWindow("Original", cv::WINDOW_NORMAL);//cv::namedWindow("Eroded", cv::WINDOW_NORMAL);cv::namedWindow("Dilated", cv::WINDOW_NORMAL);//cv::imshow("Original", binaryImage);//cv::imshow("Eroded", erodedImage);cv::imshow("Dilated", dilatedImage);cv::waitKey(0);// 方法2:自适应阈值法(适合光照不均匀的图像)//cv::adaptiveThreshold(image7, binaryImage, 255,// cv::ADAPTIVE_THRESH_GAUSSIAN_C,// cv::THRESH_BINARY, 11, 2);// 方法3:大津法(自动计算最佳阈值)// cv::threshold(image7, binaryImage, 0, 255, cv::THRESH_BINARY | cv::THRESH_OTSU);// 显示二值化结果//cv::namedWindow("Binary Image", cv::WINDOW_NORMAL);//cv::imshow("Binary Image", binaryImage);/* 新增二值化操作结束 */cv::waitKey(0);cv::destroyAllWindows();return 0;
}
三、效果展示
3.1 标准球
四张图像如下:
![]() | ![]() |
|---|---|
![]() | ![]() |
融合效果如下所示:

3.2 铝制底座
四张待融合图像如下:
![]() | ![]() |
|---|---|
![]() | ![]() |
融合效果如下所示:

小结:从实验一与实验二的数据融合结果来看,针对原始采集数据中存在的阴影干扰、缺陷特征不突出等问题,融合后的数据显著提升了可视化效果,使得数据中的缺陷特征呈现得更为清晰、直观,便于观察与分析。
相关文章:
OpenCV——图像融合
OpenCV——图像融合 一、引言1.1 图像融合分类 二、C代码实现三、效果展示3.1 标准球3.2 铝制底座 一、引言 在许多计算机视觉应用中(例如机器人运动和医学成像),需要将来自多幅图像的相关信息集成到一幅图像中。这种图像融合将提供更高的可靠性、准确性和数据质量…...
基于 Spring Boot 瑞吉外卖系统开发(四)
基于 Spring Boot 瑞吉外卖系统开发(四) 新增分类 新增分类UI界面,两个按钮分别对应两个UI界面 两个页面所需的接口都一样,请求参数type值不一样,type1为菜品分类,type2为套餐分类。 请求方法都为POST。…...
C语言for循环嵌套if相关题目
一、题目引入 以下代码程序运行结果是多少? 二、思路解析 进入一个for循环 a<100 进入第一个if b1不大于20为假 进入第二个if b4 a这时a自增为2 当b4时,满足第二个if条件 1.b4,a2 当b7时,满足第二个if条件 2.bb37,a3 当b10时,满足第二个if条件 …...
springAOP终极总结
开头先大致说一下bean的生命周期 创建 Bean 实例 → 填充属性 → 初始化前: → 所有 postProcessBeforeInitialization(bean, name) 执行 init 方法(比如 PostConstruct) → 所有 postProcessAfterInitialization(bean, name) OKÿ…...
紫光展锐5G SoC T8300:影像升级,「定格」美好世界
影像能力已成为当今衡量智能手机性能的重要标尺之一。随着消费者对手机摄影需求日益提升,手机厂商纷纷在影像硬件和算法上展开激烈竞争,力求为用户带来更加出色的拍摄体验。 紫光展锐专为全球主流用户打造的畅享影音和游戏体验的5G SoC——T8300&#x…...
视频设备轨迹回放平台用EasyCVR打造变电站智慧消防远程集中视频监控方案
一、方案背景 近年来,电力系统中变电站火灾事故频发,消防势态不容乐观。强化变电站的消防安全管理,成为电网企业核心的任务之一,预防火灾、消除隐患不容延缓。目前,我国消防安全领域仍面临着诸多的挑战,基…...
JVM性能调优:参数配置×内存诊断×GC调优实战
🚀前言 “你的Java应用是否还在经历莫名卡顿?半夜被OOM报警惊醒?GC日志像天书看不懂? 本文将用20个真实案例50个关键参数,带你掌握: 参数调优:如何用-XX:UseG1GC让GC暂停从秒级降到毫秒级&…...
如何优化 App 启动速度以实现快速打开
一、启动阶段分析(先明确问题) Android App 启动分为三个阶段: 冷启动(最慢):进程不存在,需初始化系统和 App 资源 温启动:Activity 被销毁但进程存活 热启动(最快&am…...
逍遥模拟器ARM过检测技术全解析
逍遥模拟器ARM框架安装magisk和修改设备型号隐藏应用隐藏root过检测 逍遥模拟器ARMmagisk改设备型号隐藏应用隐藏root 引言 逍遥模拟器以其出色的性能和丰富的功能,深受广大用户喜爱,让用户能在电脑上轻松运行各类安卓应用和游戏。然而,为保…...
每日定投40刀BTC(13)20250404 - 20250408
定投 坚持 《劲松吟》 千山寒雪覆虬枝, 犹自擎空展翠姿。 岂畏风霜摧瘦骨? 心如磐石立崖时。 十年蓄得凌云志, 终向苍穹吐碧丝。 莫道深冬无劲色, 长将孤影刻天墀。...
量子计算模拟中的GPU加速:从量子门操作到Shor算法实现
一、量子模拟的算力困境与GPU破局 量子计算模拟面临指数级增长的资源需求:n个量子比特的态向量需要2^n个复数存储空间。当n>30时,单机内存已无法承载(1TB需求)。传统CPU模拟器(如Qiskit的Aer)在n28…...
牛客 小红杀怪
通过枚举所有使用y技能的次数来枚举出所有方案,选出最合适的 #include<iostream> #include<cmath> #include<algorithm> using namespace std;int a, b, x, y; int ans500;int main() {ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin>&…...
部署大模型不再难:DeepSeek + 腾讯云 HAI 实战教程
网罗开发 (小红书、快手、视频号同名) 大家好,我是 展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等…...
企业资源计划(ERP)系统:数字化转型的核心引擎
在当今高度数字化的商业环境中,企业资源计划(Enterprise Resource Planning,ERP)系统已成为企业优化运营、提升竞争力的重要工具。本文将从定义与发展、核心功能模块、行业应用场景、优势与挑战以…...
基于二叉堆实现的 PriorityQueue
基于二叉堆实现的 PriorityQueue 是一种常见的数据结构,广泛用于任务调度、路径搜索、事件模拟等场景。下面我将用 Java 语言实现一个简单的基于最小堆的 PriorityQueue,即优先级最小的元素先出队。 ✅ 实现目标 使用数组实现二叉最小堆(即父…...
JVM中常见的垃圾回收器(Garbage Collectors)
JVM中常见的垃圾回收器(Garbage Collectors)的分类和描述: 一、新生代收集器(Young Generation Collectors) 新生代收集器主要负责收集新创建的对象,这些对象通常存活时间较短。 Serial GC • 单线程收集…...
极空间NAS进阶玩法:Debian 系统安装教程
文章目录 第 1 步:下载 Debian 镜像第 2 步:创建虚拟机创建虚拟机安装操作系统第 3 步:登录 Debian第 4 步:使用 Docker 搭建跳板机远程访问参考🚀 本文目标:在极空间 NAS 中安装 Debian 12。 第 1 步:下载 Debian 镜像 下载地址:https://www.debian.org/distrib/ 第…...
煤矿数据机房防静电地板:智能化时代的“隐形守护者”
在煤矿行业,调度室不仅是安全生产的“大脑”,更是数据交互的“神经中枢”。随着智能化升级,如今的煤矿调度室早已不再是传统的电话挂图配置,而是集成了高清监控、精准定位系统、智能传感器等高精密电子设备的数字化空间。然而&…...
操作符详解(下)——包含整形提升
1.讲解剩下的操作符 1.1:逗号表达式 逗号表达式,就是用逗号隔开的多个表达式。 逗号表达式,从左向右依次执⾏。整个表达式的结果是最后⼀个表达式的结果 例题1: //C的值是多少? int main() {int a 1;int b 2;int c (a &g…...
Kairos 的野望:构建“智能体即服务”生态,让万物皆可 “Agent”
随着 AI Agent 成为 AI 领域的主要叙事,AI 赛道的发展也逐渐进入到 2.0 时代。聚焦于 AI Agent 概念本身,其是一种具备感知环境、进行决策和执行任务或服务的智能系统,它们通常能够理解自然语言指令,学习用户偏好,并在…...
LeetCode 2968.执行操作使频率分数最大
给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。 你可以对数组执行 至多 k 次操作: 从数组中选择一个下标 i ,将 nums[i] 增加 或者 减少 1 。 最终数组的频率分数定义为数组中众数的 频率 。 请你返回你可以得到的 最大 频率分数。 众数指的…...
多模态智能体框架MM-StoryAgent:跨模态叙事视频生成的技术突破
一、研究背景与核心价值 由上海交通大学与阿里巴巴联合研发的MM-StoryAgent系统,基于多智能体协同框架实现了故事创作到视频生成的完整自动化流程。该系统通过整合文本、视觉、语音、音效等多模态生成技术,构建了包含角色一致性保持、跨模态适配优化等创新机制的叙事内容生产…...
Codeforces Round 1013 (Div. 3)
Problem - A - Codeforces 解题思路: 对每个需要的数字进行计数 #include<bits/stdc.h> using namespace std;int main() {int t;cin >> t;while (t--){int n;cin >> n;int two 2;int zero 3;int five 1;int three 1;int one 1;int flag …...
STM32 CRC校验与芯片ID应用全解析:从原理到实践 | 零基础入门STM32第九十七步
主题内容教学目的/扩展视频CRC与芯片ID原理实现CRC校验和读取芯片ID为单片机应用提供数据验证和身份识别的功能。 师从洋桃电子,杜洋老师 📑文章目录 一、CRC校验功能解析1.1 CRC基本原理1.2 核心功能对比 二、CRC校验应用实战2.1 典型应用场景2.2 程序实…...
巴特沃斯滤波器
一、MATLAB 实现 1. 巴特沃斯滤波器函数(支持图像/信号) function H butterworth_filter(D0, size, n, mode) % BUTTERWORTH_FILTER 生成巴特沃斯滤波器 % - D0: 截止频率 % - size: 滤波器尺寸(图像:[height, width]&…...
银河麒麟系统虚拟机网络ping不通的解决方法
问题描述:使用NAT模式搭建了银河麒麟系统虚拟主机,虚拟机内部可以联网,可以查询到具体的ip地址,同时也可以在虚拟机内部ping同宿主机ip,但使用宿主机却无法ping同银河麒麟虚拟机ip,使用ssh、ftp、sftp等工具…...
大数据学习(105)-大数据组件分析
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言📝支持一…...
基于SpinrgBoot+Vue的医院管理系统-026
一、项目技术栈 Java开发工具:JDK1.8 后端框架:SpringBoot 前端:Vue开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 二、功能介绍 (1)…...
Mujoco xml模型
Mujoco xml模型 一个例子compileroptionassetmesh default基本使用childclass与class多个class worldbodybody关系inertialjointgeom XML主要分为以下三个部分: < asset> : 用 tag导入STL文件;< worldbody>:用tag定义…...
LLM 为什么使用ID,每个单词不都是有编码的吗
LLM 为什么使用ID,每个单词不都是有编码的吗 在自然语言处理(NLP)里,把文本转换为整数 ID 来表示是一种常见的做法,以下为你详细阐述使用 ID 的原因,以及是否每个单词都有编码。 使用 ID 的原因 1. 计算机可处理性 计算机没办法直接处理文本数据,因为文本是人类使用的…...








