使用OpenCV实现两张图像融合在一起

简单介绍

图像融合技术是一种结合多个不同来源或不同传感器捕获的同一场景的图像数据,以生成一幅更全面、更高质量的单一图像的过程。这种技术广泛应用于遥感、医学影像分析、计算机视觉等多个领域。常见的图像融合技术包括基于像素级、特征级和决策级的融合方法,以及基于多尺度分解如图像金字塔的方法。

OpenCV + Python实现

OpenCV 中实现图像融合的一个常见方法是使用 addWeighted() 函数。这个函数可以用来对两张图像按照指定的权重进行线性组合,从而达到融合的效果。以下是一个基本的示例代码片段:

import cv2

# 读取两张图像
img1 = cv2.imread('image1.jpg')
img2 = cv2.imread('image2.jpg')

# 确保两张图像具有相同的尺寸,如果不相同,可以先调整到同一尺寸
if img1.shape != img2.shape:
    # 调整图像大小
    img1_resized = cv2.resize(img1, img2.shape[:2][::-1], interpolation=cv2.INTER_LINEAR)
    img2_resized = img2
else:
    img1_resized = img1
    img2_resized = img2

# 定义权重
alpha = 0.7 # 第一张图像的权重
beta = 0.3  # 第二张图像的权重
gamma = 0   # 常数值(可选,通常设为0)

# 使用 addWeighted() 进行图像融合
blended_img = cv2.addWeighted(img1_resized, alpha, img2_resized, beta, gamma)

# 显示或保存融合后的图像
cv2.imshow('Blended Image', blended_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

# 或者直接保存
cv2.imwrite('blended_image.jpg', blended_img)

在这个例子中,addWeighted() 函数接收五个参数:

  • src1(这里是 img1_resized):第一个输入图像矩阵。
  • alpha:第一个图像的权重,取值范围从0到1之间。
  • src2(这里是 img2_resized):第二个输入图像矩阵。
  • beta:第二个图像的权重。
  • gamma:常数,添加到权重和之后。

通过调整 alpha 和 beta 参数,你可以控制两张图像在融合结果中的相对强度或透明度。如果希望得到的是简单的加权平均效果,那么通常会将 gamma 设为0。如果需要做亮度调节或者其它非线性混合,可以根据实际情况调整这些参数。

OpenCV + C++实现

在C++中使用OpenCV实现图像融合的方式与Python类似,主要区别在于语法和API调用方式。以下是使用C++实现图像融合的示例代码:

#include <opencv2/opencv.hpp>

int main() {
    // 读取两张图像
    cv::Mat img1 = cv::imread("image1.jpg");
    cv::Mat img2 = cv::imread("image2.jpg");

    // 检查图像是否成功读取
    if (img1.empty() || img2.empty()) {
        std::cout << "Error: Could not open or find the images!" << std::endl;
        return -1;
    }

    // 确保两张图像具有相同的尺寸,如果不相同,可以先调整到同一尺寸
    cv::Mat img1_resized, img2_resized;
    if (img1.size() != img2.size()) {
        cv::resize(img1, img1_resized, img2.size(), 0, 0, cv::INTER_LINEAR);
        img2_resized = img2.clone();
    } else {
        img1_resized = img1.clone();
        img2_resized = img2.clone();
    }

    // 定义权重
    double alpha = 0.7; // 第一张图像的权重
    double beta = 0.3;  // 第二张图像的权重
    double gamma = 0;   // 常数值(可选,通常设为0)

    // 使用 addWeighted() 进行图像融合
    cv::Mat blended_img;
    cv::addWeighted(img1_resized, alpha, img2_resized, beta, gamma, blended_img);

    // 显示或保存融合后的图像
    cv::imshow("Blended Image", blended_img);
    cv::waitKey(0);

    // 或者直接保存
    cv::imwrite("blended_image.jpg", blended_img);

    return 0;
}

请注意,在C++版本中,你需要包含必要的头文件,并且在显示图像后使用waitKey(0)来暂停程序执行,等待用户按键,然后关闭所有打开的窗口。同时,使用clone()函数复制图像以避免原始图像被修改。

效果展示

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

每日OJ题_路径dp⑥_力扣174. 地下城游戏

目录 力扣174. 地下城游戏 解析代码 力扣174. 地下城游戏 174. 地下城游戏 难度 困难 恶魔们抓住了公主并将她关在了地下城 dungeon 的 右下角 。地下城是由 m x n 个房间组成的二维网格。我们英勇的骑士最初被安置在 左上角 的房间里&#xff0c;他必须穿过地下城并通过对…

HTML 学习笔记 总结

总结 【标签按照功能进行分类】&#xff1a; <!DOCTYPE html>&#xff1a;声明为 HTML5 文档 <html>&#xff08;双标记、块标记&#xff09;&#xff1a;是 HTML 页面的根元素&#xff0c;定义 HTML 文档 <head>&#xff08;双标记、块标记&#xff09;&a…

缓存更新策略(旁路更新策略)

文章目录 前言旁路更新策略读操作写操作 总结 前言 Redis &#xff0c;是基于内存的数据库&#xff0c;我们常将其做为缓存&#xff0c;在数据访问时&#xff0c;达到更高的性能。 那么该如何使用 Redis 做为缓存呢&#xff1f;本篇文章介绍缓存的更新策略——Cache-Aside&am…

ASP.Net实现玩具管理(三层架构,两项数据相乘)

目录 演示功能&#xff1a; 点击启动生成页面 步骤&#xff1a; 1、建文件 ​编辑 2、添加引用关系 3、根据数据库中的列写Models下的XueshengModels类 4、DAL下的DBHelper&#xff08;对数据库进行操作&#xff09; 5、DAL数据访问层下的service文件 6、BLL业务逻辑层…

Vue3全家桶 - Vue3 - 【6】组件(注册组件 + 组件通信 + 透传属性和事件 + 插槽 + 单文件CSS + 依赖注入)

组件 一、 注册组件 1.1 ❌ 全局注册 目标文件&#xff1a;main.js&#xff1b;语法&#xff1a;import { createApp } from vue import App from ./App.vue const app createApp(App)// 全局注册 app.component(组件名字, 需要注册组件)app.mount(#app)缺陷&#xff1a; 全…

06-集合篇 面试题

1.算法复杂度分析 为什么要进行复杂度分析? 指导你编写出性能更优的代码评判别人写的代码的好坏分类: 时间复杂度分析空间复杂度分析/*** 求1~n的累加和 * @param n * @return*/ public int sum(int n) {int sum = 0;for (int i = 1; i <= n; i++) {sum = sum + i;}retur…

有线网络下windows电脑被投屏方案实践

最近在看使用笔记本屏幕作PC副屏的解决方案 无线网络Miracast 如果使用Win10/11自带的Miracast方案&#xff08;即windows系统中的&#xff1a;设置-系统-投影到此电脑&#xff09;&#xff0c;原则上需要通过Wi-Fi网络&#xff08;这是因为Miracast就是Wi-Fi联盟组织提出的&a…

Python 导入Excel三维坐标数据 生成三维曲面地形图(面) 2、线条平滑曲面但有间隔

环境和包: 环境 python:python-3.12.0-amd64包: matplotlib 3.8.2 pandas 2.1.4 openpyxl 3.1.2 scipy 1.12.0 代码: import pandas as pd import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D from scipy.interpolate import griddata im…

SSM整合项目(校验)

文章目录 1.前端校验1.需求分析2.HomeView.vue的数据池中添加校验规则3.HomeView.vue 绑定校验规则![image-20240311213428771](https://img-blog.csdnimg.cn/img_convert/7770bfa16814a0efd4eb818c9869a5bd.png)4.验证是否生效5.如果验证不通过&#xff0c;阻止用户提交表单1.…

中兴R5300G4无法识别全部硬盘与服务器Smart31002100RAID卡修改端口模式配置方法

中兴R5300G4无法识别全部硬盘&#xff0c;需要启动UEFI模式。 问题描述 硬盘配置RAID或者HBA直通模式需要修改RAID卡的端口模式。 本文介绍服务器分别在legacy、UEFI模式下的配置方法。 适用产品 R5300 G4、R5500 G4、R8500 G4 解决方案 一&#xff0e;Legacy启动模式&#x…

【深度学习】换脸新科技,InstantID: Zero-shot Identity-Preserving Generation in Seconds

论文&#xff1a;https://arxiv.org/abs/2401.07519 代码:https://github.com/InstantID/InstantID demo&#xff1a;https://huggingface.co/spaces/InstantX/InstantID 文章目录 1 引言2 相关工作2.1 文本到图像扩散模型2.2 主题驱动的图像生成2.3 保持ID的图像生成 3 方法3.…

【大厂AI课学习笔记NO.80】深度学习行业人才能力图谱

深度学习领域的就业岗位及所需关键技术、工具、能力分析 深度学习作为人工智能领域的一个重要分支&#xff0c;近年来得到了飞速的发展。随着技术的不断进步和应用场景的不断拓展&#xff0c;深度学习领域的就业岗位也日益增多。本文将从领军人才、产业研发人才、应用开发人才…

post为什么会发送两次请求?

post为什么会发送两次请求&#xff1f; 同源策略 在浏览器中&#xff0c;内容是很开放的&#xff0c;任何资源都可以接入其中&#xff0c;如 JavaScript 文件、图片、音频、视频等资源&#xff0c;甚至可以下载其他站点的可执行文件。但也不是说浏览器就是完全自由的&#xf…

STM32CubeMX教程---通用定时器_PWM_舵机角度控制

实验摘要&#xff1a; 通过舵机的角度控制&#xff0c;示范通用定时器如何输出PWM信号; 目录 一、舵机速读 二、舵机如何控制角度 三、CubeMX配置 &#xff08;TIM时基、PWM周期&#xff09; 四、Keil编写代码 &#xff08;启动TIM、输出PWM、改变PWM脉宽&#xff09; 五…

“antd“: Unknown word.cSpell

你遇到的问题是 VS Code 的 Code Spell Checker 插件在检查拼写时&#xff0c;将 "antd" 标记为未知单词。"antd" 是 Ant Design 的缩写&#xff0c;是一个流行的 React UI 库&#xff0c;不是一个英语单词&#xff0c;所以 Spell Checker 会将其标记为错误…

案例分析篇04:数据库设计相关28个考点(1~8)(2024年软考高级系统架构设计师冲刺知识点总结系列文章)

专栏系列文章推荐: 2024高级系统架构设计师备考资料(高频考点&真题&经验)https://blog.csdn.net/seeker1994/category_12601310.html 【历年案例分析真题考点汇总】与【专栏文章案例分析高频考点目录】(2024年软考高级系统架构设计师冲刺知识点总结-案例分析篇-…

智慧水务大数据,信息化云平台建设,综合运营管理平台

一、水务信息化的建设方向 1、完善基础设施构建软件定义的数据中心 基础设施&#xff0c;建设新一代软件定义的数据中心;逐步整合水务和海洋资源、统一、规范化各业务系统,按照一体化、一站式的服务进行建设。 2、整合信息资源建立智慧决策体系 统一信息采集方式&#xff0c;…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:Menu)

以垂直列表形式显示的菜单。 说明&#xff1a; 该组件从API Version 9开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 Menu组件需和bindMenu或bindContextMenu方法配合使用&#xff0c;不支持作为普通组件单独使用。 子组件 包含MenuIt…

线性代数(一)——向量基础

向量基础 1、向量和线性组合2、向量的模和点乘3、矩阵4、参考 线性代数的核心是向量的加和乘两种运算的组合&#xff0c;本篇博客为线性代数的一个引子&#xff0c;主要从向量、线性组合和矩阵逐步引出线性代数的相关知识。 1、向量和线性组合 首先介绍的是向量相关&#xff0…

Python机器学习预测+回归全家桶,新增TCN,BiTCN,TCN-GRU,BiTCN-BiGRU等组合模型预测...

截止到本期&#xff0c;一共发了4篇关于机器学习预测全家桶Python代码的文章。参考往期文章如下&#xff1a; 1.机器学习预测全家桶-Python&#xff0c;一次性搞定多/单特征输入&#xff0c;多/单步预测&#xff01;最强模板&#xff01; 2.机器学习预测全家桶-Python&#xff…