OpenCV图像拼接(9)实现图像拼接功能的一个高级接口cv::Stitcher

news2025/3/31 19:21:18
  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

算法描述

cv::Stitcher 类是OpenCV中用于实现图像拼接功能的一个高级接口。它简化了从一组部分重叠的图像创建全景图的过程,隐藏了许多底层细节,如特征检测、匹配、变换估计等,使得用户可以更容易地进行图像拼接操作。

主要成员函数

  • create
    创建一个 cv::Stitcher 实例。
    参数:

    • Mode mode: 可选参数,默认为 Mode::PANORAMA。用于指定拼接模式,另一个选项是 Mode::SCANS。
  • estimateTransform

    计算输入图像之间的变换关系,但不执行实际的拼接操作。
    参数:

    • InputArrayOfArrays images: 输入图像数组,通常是一个包含多个 cv::Mat 对象的 std::vectorcv::Mat。

    返回值: 返回状态码(如 Stitcher::OK 或错误代码),指示是否成功估计了变换矩阵。

  • composePanorama

    根据之前通过 estimateTransform 方法计算出的变换关系,将输入图像组合成全景图。
    参数:

    • OutputArray pano: 输出的全景图,类型为 cv::Mat。

    返回值: 返回状态码,指示是否成功生成全景图。

  • stitch

    直接从输入图像生成全景图,相当于先调用 estimateTransform 再调用 composePanorama。
    参数:

    • InputArrayOfArrays images: 输入图像数组,通常是一个包含多个 cv::Mat 对象的 std::vectorcv::Mat。
    • OutputArray pano: 输出的全景图,类型为 cv::Mat。

    返回值: 返回状态码,指示整个拼接过程是否成功完成。

  • setRegistrationResol 和 getRegistrationResol

    设置和获取特征匹配阶段的工作分辨率(以百万像素为单位)。
    参数 (setRegistrationResol):

    • float resol: 特征匹配阶段的目标工作分辨率,单位为百万像素。
  • setSeamEstimationResol 和 getSeamEstimationResol

    设置和获取缝合线估计阶段的工作分辨率(以百万像素为单位)。
    参数 (setSeamEstimationResol):

    • float resol: 缝合线估计阶段的目标工作分辨率,单位为百万像素。
  • setCompositingResol 和 getCompositingResol

    设置和获取合成阶段的工作分辨率(以百万像素为单位)。
    参数 (setCompositingResol):
    float resol: 合成阶段的目标工作分辨率,单位为百万像素。

  • setPanoConfidenceThresh 和 getPanoConfidenceThresh

    设置和获取全景图置信度阈值,用于过滤不良图像。
    参数 (setPanoConfidenceThresh):

    • float conf_thresh: 置信度阈值,范围一般在0到1之间。
  • setWaveCorrection 和 getWaveCorrection

    设置和获取是否启用波浪校正(wave correction),用于校正曝光差异。
    参数 (setWaveCorrection):

    • bool flag: 是否启用波浪校正。
  • setWaveCorrectKind 和 getWaveCorrectKind

    设置和获取波浪校正类型,可以是水平、垂直或两者。
    参数 (setWaveCorrectKind):

    • WaveCorrectKind kind: 波浪校正类型,可选值包括 WAVE_CORRECT_HORIZ, WAVE_CORRECT_VERT, 或 WAVE_CORRECT_AUTO。

    代码示例

#include <opencv2/opencv.hpp>
#include <opencv2/stitching.hpp>
#include <vector>

using namespace cv;
using namespace std;

int main()
{
    // 加载待拼接的图像
    vector< Mat > images;
    images.push_back( imread( "/media/dingxin/data/study/OpenCV/sources/images/stich1.png" ) );
    images.push_back( imread( "/media/dingxin/data/study/OpenCV/sources/images/stich2.png" ) );

    // 创建Stitcher实例
    Ptr< Stitcher > stitcher = Stitcher::create();

    // 定义输出全景图
    Mat pano;

    // 执行拼接
    Stitcher::Status status = stitcher->stitch( images, pano );

    if ( status != Stitcher::OK )
    {
        cout << "图像拼接失败." << endl;
        return -1;
    }

    // 显示结果

    imshow( "拼接1", images[0] );
    imshow( "拼接2", images[1] );
    imshow( "全景图", pano );
    waitKey( 0 );

    return 0;
}

运行结果

、、、、、在这里插入图片描述

在这里插入图片描述

拼接效果美美哒

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

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

相关文章

dify + deepseek /qwen + win +xinference 等完成知识库建设

Dify.AI The Innovation Engine for Generative AI Applications 简介&#xff1a;Dify是一个用于构建人工智能应用程序的开源平台。我们将后端即服务和LLMOps相结合&#xff0c;简化了生成式人工智能解决方案的开发&#xff0c;使开发人员和非技术创新者都可以使用。CPU>…

模数转换电路(A/D转换器)

A/D转换&#xff0c;是将输入的模拟电压量转换成相应的数字量。 A/D转换器的类型很多&#xff0c;按工作原理可分为直接转换型和间接转换型两大类。前者直接将模拟电压量转换成数字量&#xff0c;后者是先将模拟电压量转换成一个中间量&#xff0c;再将中间量转换成数字量。 …

算法 | 麻雀搜索算法原理,公式,改进算法综述,应用场景及matlab完整代码

一、麻雀搜索算法(SSA)原理 1. 算法基础 麻雀搜索算法(Sparrow Search Algorithm, SSA)是2020年提出的一种群体智能优化算法,灵感来源于麻雀群体的觅食与反捕食行为。算法将麻雀分为三类角色:发现者(Producer):适应度最高,负责探索全局最优区域;加入者(Follower)…

《大语言模型赋能证券业开发安全:海云安技术方案在上交所专刊发表》

近日&#xff0c;海云安《大语言模型在证券业开发安全领域的探索与实践》技术方案经过上海证券交易所&#xff08;以下简称”上交所“&#xff09;行业专家评审后正式收录于《交易技术前沿——网络安全专刊&#xff08;2025年第1期 总第61期&#xff09;》。 证券信息技术研究…

【蓝桥杯】单片机设计与开发,中断系统,外部中断(下)

一、例程一&#xff1a;外部中断执行函数 #include<stc15.h>void main(void) {P20XA0;P00X00;P20X80;P00XFF;IT00;//设置外部中断0&#xff1b;上升沿下降沿均可//IT01;//设置外部中断0&#xff1b;仅下降沿EX01;//允许中断0申请中断EA 1;//打开CPU总中断while(1); }voi…

MySQL、创建数据库、表、SQL 函数:数学函数、字符串函数、日期函数、聚合函数

DAY18.1 Java核心基础 MySQL 创建数据库 数据库是一个服务&#xff0c;实际开发需要根据具体的项目创建对应的数据库实例 create database mytest1 default character set utf8 collate utf8_general_ci; create database mytest2 default character set utf8 collate utf8…

关于我对接了deepseek之后部署到本地将数据存储到mysql的过程

写在前面 今天写一下使用nodejs作为服务端&#xff0c;vue作为客户端&#xff0c;mysql的数据库&#xff0c;对接deepseek的全过程&#xff0c;要实现一个很简单的效果就是&#xff0c;可以自由的询问&#xff0c;然后可以将询问的过程存储到mysql的数据库中。 文档对接 deeps…

23种设计模式-策略(Strategy)设计模式

策略设计模式 &#x1f6a9;什么是策略设计模式&#xff1f;&#x1f6a9;策略设计模式的特点&#x1f6a9;策略设计模式的结构&#x1f6a9;策略设计模式的优缺点&#x1f6a9;策略设计模式的Java实现&#x1f6a9;代码总结&#x1f6a9;总结 &#x1f6a9;什么是策略设计模式…

vue ts+Windi CSS

1、创建vue项目 trae&#xff08;字节&#xff09;打开一个空文件夹 npm install -g vue/cli vue create my-project cd my-project vue add typescript npm run serve vue项目创建完成 2、安装windicss vue add windicss vue.config.js配置 npm install vue-router …

Angular由一个bug说起之十五:自定义基于Overlay的Tooltip

背景 工具提示&#xff08;tooltip&#xff09;是一个常见的 UI 组件&#xff0c;用于在用户与页面元素交互时提供额外的信息。由于angular/material/tooltip的matTooltip只能显示纯文本&#xff0c;所以我们可以通过自定义Directive来实现一个灵活且功能丰富的tooltip Overlay…

GPT-SoVITS本地部署:低成本实现语音克隆远程生成音频全流程实战

文章目录 前言1.GPT-SoVITS V2下载2.本地运行GPT-SoVITS V23.简单使用演示4.安装内网穿透工具4.1 创建远程连接公网地址 5. 固定远程访问公网地址 前言 今天要给大家安利一个绝对能让你大呼过瘾的声音黑科技——GPT-SoVITS&#xff01;这款由花儿不哭大佬精心打造的语音克隆神…

Flutter视频播放优化

在Flutter中实现流畅视频播放&#xff0c;选择合适的播放器插件是关键。推荐使用以下两类插件&#xff1a; 跨平台低延迟方案 flutter_vlc_player&#xff1a;基于VLC引擎&#xff0c;支持RTSP/RTMP协议&#xff0c;通过hwAcc: HwAcc.full启用硬件加速&#xff0c;配合setOpti…

嵌入式学习第二十八天--顺序栈

栈的基本代码 栈是限定仅在表尾进行插入和删除操作的线性表。 先进后出、后进先出 栈顶:允许操作的一端 栈底:不允许操作的一端 入栈&#xff0c;出栈。 顺序栈 链式栈 302\5 1.创建 CreateSeqStack 2.销毁 DestroySeqStack 3.判断是否为空栈 IsEmptySeqStack 4.判断是否为满…

基于MCP协议的多模态模型优化在医疗3D打印精密人工关节制造中的研究

一、引言 1.1 研究背景与意义 在全球人口老龄化趋势愈发明显的当下,诸如骨关节炎、类风湿性关节炎这类关节疾病的发病率不断攀升,进而使得人工关节置换手术的需求呈现出激增态势。人工关节置换手术作为治疗终末期关节疾病的有效手段,能够显著缓解患者疼痛,提升关节功能与生…

【Unity】 HTFramework框架(六十三)SerializableDictionary可序列化字典

更新日期&#xff1a;2025年3月26日。 Github 仓库&#xff1a;https://github.com/SaiTingHu/HTFramework Gitee 仓库&#xff1a;https://gitee.com/SaiTingHu/HTFramework 索引 一、SerializableDictionary可序列化字典1.使用SerializableDictionary2.实现思路 二、Serializ…

MATLAB绘图配色包说明

本栏目将分享MATLAB数据分析图表&#xff0c;该贴讲述配色包的使用 将配色包colormap_nclCM文件夹添加到路径close all&#xff08;尽量不要删&#xff09;&#xff0c;使用map colormap(nclCM(309))时会多出来一张空白图片。配色资源来自slandarer&#xff1b;找不到合适颜色…

8路CXP相机采集系统介绍

8xCXP相机采集系统介绍 目录 1 系统概述 4 2 硬件架构 5 2.1 FPGA处理单元 5 2.2 CXP接口层 6 2.3 CXP相机说明与使用要求 7 2.4 SSI控制器板 8 3 FPGA方案 9 3.1 FPGA实现 9 3.2 Block Design说明 10 4 软件方案 14 4.1 嵌入式层 14 4.2 上位机软件&#xff08;C…

Stable Diffusion 基础模型结构超级详解!

1. Transformer 第一个只用 Attention 机制来解决序列到序列问题的模型&#xff0c;最早被 Google 用来解决翻译问题 对于中英翻译而言&#xff0c;需要解决三个具体的问题&#xff1a; 如何用数字表示中文和英文 如何让神经网络理解语义 如何让神经网络生成英文 1.1 Tok…

【Linux网络(七)】数据链路层

目录 1、认识MAC地址 2、 mac帧格式 3、局域网的通信原理 4、ARP协议 浏览器输入url1后发生的事情&#xff1a;&#xff08;面试题&#xff09; 数据链路层解决的是&#xff1a;直接相连的主机&#xff08;不仅仅包括电脑&#xff0c;还包括路由器&#xff09;之间&#x…

2025年渗透测试面试题总结-某奇安信-Ateam(题目+回答)

网络安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 奇安信-Ateam 一、SQL注入攻防技术体系 1.1 SQL注入类型矩阵&#xff08;基于利用方式&#xff09; …