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;
}

运行结果

、、、、、

拼接效果美美哒

相关推荐
科技小花4 小时前
全球化深水区,数据治理成为企业出海 “核心竞争力”
大数据·数据库·人工智能·数据治理·数据中台·全球化
zhuiyisuifeng5 小时前
2026前瞻:GPTimage2镜像官网或将颠覆视觉创作
人工智能·gpt
徐健峰5 小时前
GPT-image-2 热门玩法实战(一):AI 看手相 — 一张手掌照片生成专业手相分析图
人工智能·gpt
weixin_370976355 小时前
AI的终极赛跑:进入AGI,还是泡沫破灭?
大数据·人工智能·agi
Slow菜鸟5 小时前
AI学习篇(五) | awesome-design-md 使用说明
人工智能·学习
冬奇Lab6 小时前
RAG 系列(五):Embedding 模型——语义理解的核心
人工智能·llm·aigc
深小乐6 小时前
AI 周刊【2026.04.27-05.03】:Anthropic 9000亿美元估值、英伟达死磕智能体、中央重磅定调AI
人工智能
码点滴6 小时前
什么时候用 DeepSeek V4,而不是 GPT-5/Claude/Gemini?
人工智能·gpt·架构·大模型·deepseek
狐狐生风6 小时前
LangChain 向量存储:Chroma、FAISS
人工智能·python·学习·langchain·faiss·agentai
波动几何6 小时前
CDA架构代码工坊技能cda-code-lab
人工智能