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张图片及最后生成的效果图

下面附上本次项目的源码,源码中的readme有opencv的编译方式(ubuntu、arm)及使用方法:opencv3.4.12全景拼接源码

当然,也可以在github上面直接下载,可以的话顺便fork和star。链接:https://github.com/Sandy6Zhou/opencv_panoramic_stitching

​  代码要的下方留言邮箱我会第一时间发给你们的,有什么问题也可以下面评论!

相关推荐
哈__几秒前
CANN加速语音识别ASR推理:声学模型与语言模型融合优化
人工智能·语言模型·语音识别
大闲在人9 分钟前
8. 供应链与制造过程术语:产能
算法·制造·供应链管理·智能制造·工业工程
慢半拍iii10 分钟前
CANN算子开发实战:手把手教你基于ops-nn仓库编写Broadcast广播算子
人工智能·计算机网络·ai
一只小小的芙厨14 分钟前
寒假集训笔记·以点为对象的树形DP
c++·算法
历程里程碑18 分钟前
普通数组----合并区间
java·数据结构·python·算法·leetcode·职场和发展·tornado
User_芊芊君子23 分钟前
CANN数学计算基石ops-math深度解析:高性能科学计算与AI模型加速的核心引擎
人工智能·深度学习·神经网络·ai
小白|27 分钟前
CANN与联邦学习融合:构建隐私安全的分布式AI推理与训练系统
人工智能·机器学习·自动驾驶
艾莉丝努力练剑34 分钟前
hixl vs NCCL:昇腾生态通信库的独特优势分析
运维·c++·人工智能·cann
执风挽^35 分钟前
Python基础编程题2
开发语言·python·算法·visual studio code
梦帮科技35 分钟前
Node.js配置生成器CLI工具开发实战
前端·人工智能·windows·前端框架·node.js·json