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

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

  • 操作系统: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;
}

运行结果

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

在这里插入图片描述

拼接效果美美哒

相关文章:

  • C++面试题库
  • 【已解决】Git:为什么 .gitignore 不生效?如何停止跟踪已提交文件并阻止推送?
  • 算法 | 2024最新算法:鳑鲏鱼优化算法原理,公式,应用,算法改进研究综述,matlab代码
  • 科软25机试
  • 【服务端】使用conda虚拟环境部署Django项目
  • ESP32-CAM在PlatformIO IDE里实现OTA的几个小TIPS
  • java程序员实用英语学习总结
  • JBDev - Theos下一代越狱开发工具
  • OpenBMC:BmcWeb 生效路由2 Trie字典树添加节点
  • CentOS 7 磁盘及分区管理笔记
  • Redis 性能数据解读与问题排查优化版
  • Oracle 10G DG 修复从库-磁盘空间爆满导致从库无法工作
  • SvelteKit 最新中文文档教程(12)—— 高级路由
  • LeetCode 解题思路 26(Hot 100)
  • 计算机网络基础:量子通信技术在网络中的应用前景
  • js文字两端对齐
  • 蓝桥杯第10届 后缀表达式
  • Microi吾码界面设计引擎之基础组件用法大全【内置组件篇·中】
  • Intellij IDEA2023 创建java web项目
  • 修改菜品-01.需求分析与设计
  • 制作网站的步骤/今日最新国际新闻头条
  • wordpress做论坛网站/如何网站seo
  • 微网站 备案/百度可以发布广告吗
  • 做效果图的方便的网站/推广方案框架
  • 网站制作的收费/网站排名怎么做上去
  • asp网站空间/优秀营销软文范例500字