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。

    代码示例

cpp 复制代码
#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;
}

运行结果

、、、、、

拼接效果美美哒

相关推荐
超龄超能程序猿3 分钟前
提升文本转SQL(Text-to-SQL)精准度的实践指南
数据库·人工智能·sql
柒柒钏19 分钟前
PyTorch学习总结(一)
人工智能·pytorch·学习
金融小师妹26 分钟前
基于NLP政策信号解析的联邦基金利率预测:美银动态调整12月降息概率至88%,2026年双降路径的强化学习模拟
大数据·人工智能·深度学习·1024程序员节
_山止川行1 小时前
生活
人工智能
是Dream呀1 小时前
昇腾实战 | 昇腾 NPU 异构编程与 GEMM 调优核心方法
人工智能·华为·cann
JobDocLS1 小时前
深度学习软件安装
人工智能·深度学习
新智元1 小时前
2027 年,人类最后一次抉择
人工智能·openai
新智元1 小时前
DeepSeek V3.2 爆火,Agentic 性能暴涨 40% 解密
人工智能·aigc
多云的夏天1 小时前
AI-工具使用总结-2025-12
人工智能
哇咔咔_sky1 小时前
SpeakBot 用自然语言控制机器人 — 说话,它就动。Python+React Native
人工智能