opencv实践项目-多张图片拼接之stitcher

这篇具有很好参考价值的文章主要介绍了opencv实践项目-多张图片拼接之stitcher。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.简介

OpenCV从2.4.x版本之后多出来一个新的模型 图像拼接,该模块通过简单的高级API设置,可以获得比较好的图像拼接效果,OpenCV官方提供了一个高度集成的API函数 Stitcher,只要两行代码就可以得到一个很好的拼接图像。

Ptr<Stitcher> stitcher = Stitcher::create(mode);
Stitcher::Status status = stitcher->stitch(imgs, pano);

其中第一行代码是创建拼接Stitcher的指针,第二行代码是调用拼接算法,

imgs表示的输入参数,是一系列Mat对象的vector。

pano表示的输出结果,是拼接之后的Mat对象

2. 拼接算法流程

stitching拼接算法 流程图示如下:
opencv实践项目-多张图片拼接之stitcher
可见图像拼接是一个很复杂的算法,是由一系列的基础算法构成,这些基础算法如果你不是很了解,其实很难实现自己的图像拼接,这其中影响拼接算法stitch工作最常见几个算法子模块为:

  • 特征发现与描述子
    常见的特征可以选择SIFT、SURF、AKAZE、ORB等特征算子进行匹配

  • 相机参数
    不同的相机参数与设置会导致不同的结果

  • 融合方式(blender)
    不同的融合方式,也会导致不同结果

  • 各种阈值设置,特别是config threshold,如果无法特征匹配,记得把这个阈值调小点

3. 代码演示

#include <opencv2/opencv.hpp>
#include <iostream>
 
using namespace cv;
using namespace std;
 
int main(int argc, char** argv) {
    vector<string> files;
    glob("D:/images/zsxq/1", files);
    vector<Mat> images;
    for (int i = 0; i < files.size(); i++) {
        printf("image file : %s \n", files[i].c_str());
        images.push_back(imread(files[i]));
    }
 
    // 设置拼接模式与参数
    Mat result1, result2, result3;
    Stitcher::Mode mode = Stitcher::PANORAMA;
    Ptr<Stitcher> stitcher = Stitcher::create(mode);
 
    // 拼接方式-多通道融合
    auto blender = detail::Blender::createDefault(detail::Blender::MULTI_BAND, true);
    stitcher->setBlender(blender);
 
    // 拼接
    Stitcher::Status status = stitcher->stitch(images, result1);
 
    // 平面曲翘拼接
    auto plane_warper = makePtr<cv::PlaneWarper>();
    stitcher->setWarper(plane_warper);
    status = stitcher->stitch(images, result2);
 
    // 鱼眼拼接
    auto fisheye_warper = makePtr<cv::FisheyeWarper>();
    stitcher->setWarper(fisheye_warper);
    status = stitcher->stitch(images, result3);
 
    // 检查返回
    if (status != Stitcher::OK)
    {
        cout << "Can't stitch images, error code = " << int(status) << endl;
        return EXIT_FAILURE;
    }
    imwrite("D:/result1.png", result1);
    imwrite("D:/result2.png", result2);
    imwrite("D:/result3.png", result3);
 
    waitKey(0);
    return 0;
}

另外在拼接的时候可以设置不同warper,这样会对拼接之后的图像生成不同效果,常见的效果包括

  • 默认

  • 环视(平面曲翘)

  • 鱼眼相机

原图:
img1
opencv实践项目-多张图片拼接之stitcher
img2
opencv实践项目-多张图片拼接之stitcher
img3
opencv实践项目-多张图片拼接之stitcher
img4
opencv实践项目-多张图片拼接之stitcher

效果图:
opencv实践项目-多张图片拼接之stitcher
opencv实践项目-多张图片拼接之stitcher
opencv实践项目-多张图片拼接之stitcher
参考链接:
https://blog.csdn.net/qq_42722197/article/details/128021635文章来源地址https://www.toymoban.com/news/detail-440338.html

到了这里,关于opencv实践项目-多张图片拼接之stitcher的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • opencv实践项目-图像拼接

    图像拼接是计算机视觉中最成功的应用之一。如今,很难找到不包含此功能的手机或图像处理API。在本 文中,我们将讨论如何使用OpenCV进行图像拼接。也就是,给定两张共享某些公共区域的图 像,目标是“缝合”它们并创建一个全景图像场景。当然也可以是给定多张图像,

    2024年02月02日
    浏览(42)
  • openCV实践项目:图片文本检测

    上一期我们通过对实验:银行卡卡号识别 加深了对前面所学openCV图像处理的一些理解 openCV实践项目:银行卡卡号识别_老师我作业忘带了的博客-CSDN博客 本次图片文本检测相对于要容易一些,内容如下:   把一个这样的图片,通过仿射变换转换成那样的图片。 然后再通过

    2024年02月07日
    浏览(41)
  • C#处理医学影像(四):基于Stitcher算法拼接人体全景脊柱骨骼影像

    在拍摄脊柱或胸片时,经常会遇到因设备高度不够需要分段拍摄的情况, 对于影像科诊断查阅影像时希望将分段影像合并成一张影像,有助于更直观的观察病灶, 以下图为例的两个分段影像:       我们使用OpenCVSharp中的Stitcher类的Stitch方法,导入两张图像并拼接:  但结果

    2024年02月02日
    浏览(49)
  • (OpenCV)图片拼接

            图片拼接在许多领域都有广泛的应用,包括但不限于以下几个方面: 全景摄影 :在摄影中,通过将多张照片拼接在一起可以实现全景照片的效果。这在旅游景点、房地产展示等领域有着广泛的应用,能够提供更加生动、真实的视觉体验。 医学影像处理 :在医学

    2024年02月22日
    浏览(39)
  • OpenCV处理图片拼接

    读入图片 预处理图片 图片特征提取 特征处理 特征匹配 透视变换 图片再处理 (可选)图片特征点连线配对 Sticher.py 引入头文件 创建类 自定义函数 def stich:外部接口函数 def detectAndDescribe:用于图片的特征点提取,内部逻辑函数 def matchKeypoints:特征点匹配 def drawMatches:显示2图片的特

    2024年02月21日
    浏览(35)
  • vue项目将多张图片生成一个gif动图

    当前做项目有一个需求是将多张图片生成一个gif动图的形式 类似下面图片几张图片叠加生成一个gif动图 图片涉及工作隐私,就不公开啦  我们要引入一个gif.js的引入包,但是他没有直接引入的方式,只能从官方下载文件包,下载地址:git地址 下载好的包找到下面这个两个文

    2024年02月03日
    浏览(40)
  • OpenCV将两张图片拼接成一张图片

    可以用opencv或者numpy的拼接函数,直接将两张图拼接到一起,很简单方便,参考代码2, 推荐此方式 。 新建图片,将两张图片的像素值填充到新图片对应位置上即可,参考代码1。 以下是将两张图片拼接成一张图片的示例代码: 以下是将两张图片在同一个窗口显示的示例代码

    2024年02月04日
    浏览(49)
  • 4 OpenCV实现多目三维重建(多张图片增量式生成稀疏点云)【附源码】

    本文是基于 OpenCV4.80 进行的,关于环境的配置可能之后会单独说,先提一嘴 vcpkg 真好用 从多张图片逐步生成稀疏点云,这个过程通常包括以下步骤: 初始重建: 初始两张图片的选择 十分重要 ,这是整个流程的基础,后续的增图都是在这两张图片的基础上进行的 对于输入图

    2024年02月06日
    浏览(45)
  • Python 结合opencv实现图片截取和拼接

    python 3.6.2 scikit-build-0.16.7 win10 opencv_python-4.5.4.60-cp36-cp36m-win_amd64.whl 下载地址: https://pypi.org/project/opencv-python/4.5.4.60/#files https://files.pythonhosted.org/packages/57/6c/7f4f56b2555d5c25dd4f41fc72a16dc6402cb2b4f967da11d8d26c669b55/opencv_python-4.5.4.60-cp36-cp36m-win_amd64.whl 注意:下载时不用下abi版的,比如 o

    2024年02月08日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包