使用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 = img1img2_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()函数复制图像以避免原始图像被修改。

效果展示

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

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

相关文章

基与HTML5的塔防游戏设计与实现

目 录 摘 要 I Abstract II 引 言 1 1 项目背景与相关技术 3 1.1 背景与发展简介 3 1.2 HTML5技术及其优势 4 1.3 JavaScript开发的优势与劣势 4 1.4 CSS样式表在开发中的用处 5 1.5 本章小结 6 2 系统分析 7 2.1 需求分析 7 2.2 问题分析 7 2.3 流程设计 7 2.3 功能分析 8 2.…

数据分析入门,深入浅出的数据分析

时下正值大数据与人工智能高速发展的时刻&#xff0c;相信很多对数据分析感兴趣的朋友想要转行。很多朋友选择从事数据分析&#xff0c;主要是看到这个岗位的发展前景和薪资待遇。 但是一些小伙伴并不知道数据分析到底是做什么的&#xff1f;需要用到哪些知识&#xff1f; 为…

【Flink SQL】Flink SQL 基础概念:SQL Table 运行环境、基本概念及常用 API

Flink SQL 基础概念&#xff1a;SQL & Table 运行环境、基本概念及常用 API 1.SQL & Table 简介及运行环境1.1 简介1.2 SQL 和 Table API 运行环境依赖 2.SQL & Table 的基本概念及常用 API2.1 一个 SQL / Table API 任务的代码结构2.2 SQL 上下文&#xff1a;Tabl…

linux部署服务相关基础操作:磁盘挂载、jdk安装、docker安装、docker-compose环境安装、mysql、redis、jenkins等

磁盘挂载 1、运行mount查看数据盘挂载信息。返回结果中没有/dev/vdb1的信息。 2、运行fdisk -l查看数据盘分区信息。 3、格式化磁盘 mkfs -t ext4 /dev/vdb3.1、 (格式化后这一步跳过)运行cat /etc/fstab查看数据盘分区/dev/vdb1原有的挂载点名称。 4、运行mkdir /data重新…

[python3] 责任链模式

责任链模式&#xff08;Chain of Responsibility Pattern&#xff09;是一种行为设计模式&#xff0c;它允许多个对象都有机会处理请求&#xff0c;从而避免请求的发送者和接收者之间的耦合关系。请求沿着链传递&#xff0c;直到有一个对象处理它为止。 下面是一个简单的 Pyth…

Linux---多线程(上)

一、线程概念 线程是比进程更加轻量化的一种执行流 / 线程是在进程内部执行的一种执行流线程是CPU调度的基本单位&#xff0c;进程是承担系统资源的基本实体 在说线程之前我们来回顾一下进程的创建过程&#xff0c;如下图 那么以进程为参考&#xff0c;我们该如何去设计创建一个…

paddle的版面分析的环境搭建及使用

一、什么是版面分析 版面分析技术&#xff0c;主要是对图片形式的文档进行版面分析&#xff0c;将文档划分为文字、标题、表格、图片以及列表5类区域&#xff0c;如下图所示&#xff1a; 二、应用场景 2.1 合同比对 2.2 文本类型划分 2.3 通用文档的还原 版面分析技术可将以…

论文阅读FCN-Transformer Feature Fusion for PolypSegmentation

本文提出了一种名为Fully Convolutional Branch-TransFormer (FCBFormer)的图像分割框架。该架构旨在结合Transformer和全卷积网络&#xff08;FCN&#xff09;的优势&#xff0c;以提高结肠镜图像中息肉的检测和分类准确性。 1&#xff0c;框架结构&#xff1a; 模型采用双分…

【Python】牛客网—软件开发-Python专项练习

专栏文章索引&#xff1a;Python 1.&#xff08;单选&#xff09;下面哪个是Python中不可变的数据结构&#xff1f; A.set B.list C.tuple D.dict 可变数据类型&#xff1a;列表list[ ]、字典dict{ }、集合set{ }(能查询&#xff0c;也可更改)数据发生改…

Golang 开发实战day03 - Arrays Slices

Golang 教程03 - Arrays&#xff0c;Slices Go语言中的数组和切片都是用于存储数据的类型&#xff0c;但它们之间存在一些重要的区别。了解这些区别对于有效地使用它们至关重要。 1. Arrays 数组 1.1 定义 数组是一种固定大小的数据结构&#xff0c;用于存储相同类型的值。…

广西省行政村边界shp数据/广西省乡镇边界/广西省土地利用分类数据/径流分布

广西壮族自治区&#xff0c;地处中国南部&#xff0c;北回归线横贯中部。南北以贺州——东兰一线为界&#xff0c;此界以北属中亚热带季风&#xff0c;以南属南亚热带季风。 数据范围&#xff1a;全国行政区划-行政村界 数据类型&#xff1a;面状数据&#xff0c;全国各省市县…

1月笔记本电脑行业分析:多品牌下滑但ThinkPad逆势增长!

2024年1月&#xff0c;笔记本行业市场格局出现较大的变化。长期在京东平台保持头部联想和惠普&#xff0c;被ThinkPad挤下&#xff08;虽然是联想旗下品牌&#xff09;&#xff0c;排名掉至第二和第三。ThinkPad以超2.7亿的月销售额成绩拿下第一&#xff0c;市占比16%。 与去年…

PHP使用 enqueue/amqp-lib拓展实现rabbitmq任务处理

一&#xff1a;拓展安装 composer require enqueue/amqp-lib 文档地址&#xff1a;https://github.com/php-enqueue/enqueue-dev/blob/master/docs/transport/amqp_lib.md 二&#xff1a;方法介绍 1&#xff1a;连接rabbitmq $factory new AmqpConnectionFactory([host &…

java SSM农产品订购网站系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java SSM农产品订购网站系统是一套完善的web设计系统&#xff08;系统采用SSM框架进行设计开发&#xff0c;springspringMVCmybatis&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采…

如何在 Unity 中创建简单的多人游戏

在本文中,我将向你展示如何将 Mirror 添加到 Unity 项目中,并创建一个简单的多人游戏。你还可以从 GitHub下载项目文件。Mirror 是一个网络库,可让你在 Unity 中轻松创建多人游戏。它是免费的、开源的,实际上是 UNET(Unity 自己已弃用的网络 API)的一个分支。 游戏 每个…

算法-贪心-112. 雷达设备

题目 假设海岸是一条无限长的直线&#xff0c;陆地位于海岸的一侧&#xff0c;海洋位于另外一侧。 每个小岛都位于海洋一侧的某个点上。 雷达装置均位于海岸线上&#xff0c;且雷达的监测范围为 d&#xff0c;当小岛与某雷达的距离不超过 d 时&#xff0c;该小岛可以被雷达覆…

大语言模型:Large Language Models Are Human-Level Prompt Engineers概述

研究内容 如何通过prompt&#xff0c;在不进行微调大语言模型的前提下&#xff0c;增加大语言模型的表现 研究动机 prompt非常有用&#xff0c;但是人工设置的非常不自然&#xff1b;因此提出了要自动使用大语言模型自己选择prompt&#xff1b;取得了很好的效果。 作者主要…

python实现生成树

生成树 生成树&#xff08;Spanning Tree&#xff09;是一个连通图的生成树是图的极小连通子图&#xff0c;它包含图中的所有顶点&#xff0c;并且只含尽可能少的边。这意味着对于生成树来说&#xff0c;若砍去它的一条边&#xff0c;则会使生成树变成非连通图&#xff1b;若给…

Git LFS【部署 01】Linux环境安装git-lfs及测试

Linux系统安装git-lfs及测试 1.下载2.安装3.测试4.总结 Git LFS&#xff08;Large File Storage&#xff09;是一个用于Git版本控制系统的扩展&#xff0c;它专门用来管理大型文件&#xff0c;如图像、音频和视频文件。 1.下载 安装包下载页面&#xff1a;https://github.com/…

web3D三维引擎(Direct3D、OpenGL、UE、U3D、threejs)基础扫盲

Hi&#xff0c;我是贝格前端工场的老司机&#xff0c;本文介绍文web3D的几个引擎&#xff0c;做个基础扫盲&#xff0c;如果还不能解决问题&#xff0c;可以私信我&#xff0c;搞私人订制呦。 三维引擎是指用于创建和渲染三维图形的软件框架。它们通常提供了图形处理、物理模拟…