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

运行结果

、、、、、

拼接效果美美哒

相关推荐
德育处主任2 分钟前
『SD』分享几个我觉得不错的大模型
人工智能·aigc
SecPulse21 分钟前
流影---开源网络流量分析平台(四)(分析引擎部署)
运维·服务器·人工智能·网络安全·开源·流影
黑金IT42 分钟前
借助FastAdmin和uniapp,高效搭建AI智能平台
人工智能·uni-app·php
钟屿1 小时前
Deep Multi-scale Convolutional Neural Network for Dynamic Scene Deblurring论文阅读
论文阅读·图像处理·人工智能·深度学习·计算机视觉·图像去模糊·图像恢复
处女座_三月1 小时前
大模型架构记录13【hr agent】
人工智能·python·深度学习·langchain
嘿黑嘿呦1 小时前
深度学习Note.5(机器学习2)
人工智能·深度学习·机器学习
b***25111 小时前
磷酸铁锂电池自动分选机:新能源产业的智能新宠
大数据·人工智能
HP-Patience2 小时前
【YOLOv11】目标检测任务-实操过程
人工智能·yolo·目标检测
特创数字科技2 小时前
深度求索:开源革命下的AI普惠之路
人工智能·开源
果冻人工智能2 小时前
地球无法承受 AI,是时候踩刹车了
人工智能