opencv多张图片实现全景拼接

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

  最近camera项目需要用到全景拼接,故此查阅大量资料,终于将此功能应用在实际项目上,下面总结一下此过程中遇到的一些问题及解决方式,同时也会将源码附在结尾处,供大家参考,本文采用的opencv版本为3.4.12。

  首先说一下此源码的大概执行流程,此项目进行全景拼接采用的图片数是10张,每张图片大小为320×180,而且图片是从左到右,或者从右到左进行拼接的,也就是此拼接是应用在云台摄像头上的,由于摄像头拍出来的图片有畸变,所以在获取到320×180的图片后,会进行裁剪成200*180的尺寸,舍弃双边各60的尺寸,保留中间没畸变的图片,这样会使得拼接更容易。
  此源码中图片拼接的原理就是利用相邻两张图片有重叠的部分进行拼接,其过程就是利用surf算法查找相邻两张图片的关键点和描述子,再根据关键点和描述子利用flann算法找出比较好的一些特征点,然后根据两图片的特征点进行矩阵的变换,由于变换后的矩阵数据并不是都是可以使用的,而且是使用在云台摄像头上的,所以只需关注矩阵数据中的x,y偏移的数据即可,也就是说需要对矩阵数据中的x,y偏移的数据进行判断,以保证计算出来的矩阵是正常的,若计算出来的矩阵数据异常,则需动态调整surf算法中的阈值,再次对这两张图片进行关键点和描述子的查找并匹配特征点,再一次计算矩阵,直到找到合适的矩阵数据再进行下个相邻两张图片的拼接。由于图片是自左向右或自右向左顺序拍出来的,所以上文中提到的对x,y偏移的数据进行判断的条件就是判断x偏移的数据是否都为正的(自左向右拍的图片)并且在图片的长度范围内,至于这个限制的条件需要根据实际摄像头转动的角度去进行判断,至于对y偏移数据的判断的话,因为是应用在云台摄像头上的,所以对于y方向的拼接,其图片拼接后在y方向上的偏移是很小的,这里设置y方向上的限制条件是正负10以内。上文中提到的动态调整surf算法的阈值直到找到合适的矩阵数据的方式,这里会有一个问题,那就是阈值调整到最小后(也就是0),还是找不到合适的矩阵数据那怎么办呢?这里的做法是参考前面计算出的正常矩阵去取一个平均值作为本次的矩阵数据,没错,就是硬拼接,使得图像能拼接成功。当然,如果是在第一张图片与第二张图片就找不到合适的矩阵数据,那么前面没有正常的矩阵数据作为参考的话,此拼接就失败了,这是唯一拼接失败的情况。
  在最开始拼接之前,还会申请一个总的Mat数据去存储拼接后的图片数据,那么这个Mat数据究竟多大呢,这里是先申请10张图片尺寸大小横向的空间,最后面拼接完十张图片后,肯定会留下一大片黑色区域,包含上下边框也会有黑色区域的存在,源码中采用两种去黑的方式完全图片的裁剪,建议使用默认的去黑方式即可,当然也可以尝试另一张方式。
  此源码并未使用opencv开源中的例程去修改,因为开源中的例程执行速度太慢了,不符合嵌入式设备的处理,同时此源码也支持图片自左向右图片的拼接,这是为了满足云台摄像头倒装的情况而增加的
  下面附上例程的10张图片及最后生成的效果图
opencv多张图片实现全景拼接,人工智能,算法,计算机视觉,opencv
opencv多张图片实现全景拼接,人工智能,算法,计算机视觉,opencv

  下面附上本次项目的源码,源码中的readme有opencv的编译方式(ubuntu、arm)及使用方法:opencv3.4.12全景拼接源码
  当然,也可以在github上面直接下载,可以的话顺便fork和star。链接:https://github.com/Sandy6Zhou/opencv_panoramic_stitching
​  代码要的下方留言邮箱我会第一时间发给你们的,有什么问题也可以下面评论!文章来源地址https://www.toymoban.com/news/detail-798629.html

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

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

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

相关文章

  • 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日
    浏览(33)
  • 4 OpenCV实现多目三维重建(多张图片增量式生成稀疏点云)【附源码】

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

    2024年02月06日
    浏览(31)
  • 基于MATLAB的Harris角点检测完成图片全景拼接

    目录 作业概要 1 原理及实现 1 2.1. 模块1 Harris角点检测 1 根据角点响应函数计算每个像素点的角点响应值; 2 2.2. 模块2 关键点的描述及其匹配 3 2.2.1. 生成描述向量 3 2.2.2. 匹配描述子 4 输出matched_points和匹配点对数count; 5 2.3. 模块3 转换矩阵的估计 5 输出仿射变换矩阵H。 6 2

    2024年01月17日
    浏览(28)
  • 人工智能——“kmeans实现图片分割”(Python实现)

    (2)边缘分割:对图像边缘进行检测,即检测图像中灰度值发生跳变的地方,则为一片 区域的边缘。 (3)直方图法:对图像的颜色建立直方图,而直方图的波峰波谷能够表示一块区域的颜 色值的范围,来达到分割的目的。 (4)特定理论:基于 聚类分析 、小波变换等理论完成图像

    2024年04月17日
    浏览(27)
  • 人工智能-OpenCV+Python实现人脸识别(人脸检测)

    在OpenCV中使用Haar特征检测人脸,那么需要使用OpenCV提供的xml文件(级联表)在haarcascades目录下。这张级联表有一个训练好的AdaBoost训练集。首先要采用样本的Haar特征训练分类器,从而得到一个级联的AdaBoost分类器。Haar特征值反映了图像的灰度变化情况。例如:脸部的一些特征

    2024年02月06日
    浏览(81)
  • 基于Springboot+百度AI人工智能图像图片智能处理系统设计与实现

    基于Springboot+百度AI人工智能图像图片智能处理系统设计与实现  博主介绍: 《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程,

    2024年02月05日
    浏览(49)
  • 爆肝3W多字,100多张配图!深度学习从小白到精通一篇博文帮你打开人工智能的大门建议收藏不容错过!!!

    🤡博客主页:Code_文晓 😻 欢迎关注: 感谢大家的点赞评论+关注,祝您学有所成!   在介绍深度学习之前,我们先看下这幅图:人工智能机器学习深度学习。 深度学习是机器学习的⼀个子集,也就是说深度学习是实现机器学习的一种方法。与机器学习算法的主要区别如下

    2024年03月24日
    浏览(36)
  • (OpenCV)图片拼接

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

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

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

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

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

    2024年02月04日
    浏览(37)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包