Opencv项目实战:04 全景图片拼接
1,效果展示
首先,需要拍摄像这种的图片(当然,大家用我这的就可以了,我实在是太了解大家了)。
接下来,我们来看看拼接的效果图:
效果非常的棒,那我们再来看看,不同大小的图片的拼接效果
除了缺失的角,其他的都还好说,本来也在我的意料之中,如果还能实现自动补齐,那我肯定会大呼一声:“厉害!!”
2,项目准备
(1)文件夹
在pycharm项目中,请向我一样按照如图下所示创建。
我们只需要一个放置不同图片的文件夹和一个.py文件,注意照片一定不能放乱了,在结尾处我会附上素材。
(2)熟悉一下os
当然,此项目我们只需要一个函数,学久必有忘。
os.listdir(path)#返回path指定的文件夹包含的文件或文件夹的名字的列表。
3,代码展示与讲解
import cv2
import osmainFolder = 'Images'
myFolders = os.listdir(mainFolder) #读取主文件
print(myFolders)for folder in myFolders:path = mainFolder +'/'+folder images =[]myList = os.listdir(path)print(f'Total number of images detected {len(myList)}')for imgN in myList:curImg = cv2.imread(f'{path}/{imgN}')curImg = cv2.resize(curImg,(0,0),None,0.2,0.2)images.append(curImg)stitcher = cv2.Stitcher.create()(status,result) = stitcher.stitch(images)if (status == cv2.STITCHER_OK):print('Panorama Generated')cv2.imshow(folder,result)cv2.waitKey(1)else:print('Panorama Generation Unsuccessful')cv2.waitKey(0)
老规矩,还是看我分析讲解代码,再去看代码敲一遍。
- 首先,我们将图片是放在了Image文件,那么它就是我们的主文件夹,使用os.listdir(path)函数,他会返回一个包含了此路径下的列表如下所示:
- 其次,我们已经知道在Images文件夹下有两个文件,此时需要对其进行遍历,读取我们的图片,还是用os.listdir(path)函数,但此时我们的路径需要更改了,path=Images/1, Images/2,成功读取后,将图片放入列表当中,并通过打印查看是否将所有的图片读取完。
- 除此之外,我们需要用到的是Opencv当中的Stitcher类,在这个类下有一个create函数,它的作用是简短创建在其中一种缝合模式下配置的缝合器,参数不用调配,它会提供一个默认值,它的使用方式:cv2.Stitcher.create(),接下来,我们还需要用Stitcher类下的stitch函数,它的作用是,返回状态代码和拼接结果。
- 最后如果返回的状态码正确,即status == cv2.STITCHER_OK,当然我们将代码改成
if (status == 0):
也没有任何问题,因为STITCHER_OK = 0。
4,项目总结与评价
如果你想创建一个应用程序,实现拼接功能,再了解特征检测的内部运行,将其结合在一起,这将是一个很棒思考的方向,因为我们的图片都是同一时间的场景,对比度,饱和度等是看不出变化的。
最初的效果展示中,我们可以看到在边角处还是存在着一些黑色瑕疵,那么两张尺寸不同的图,也可以进行拼接,只是有所缺角。
5,项目素材
Images/1/1.jpg
Images/1/2.jpg
Images/1/3.jpg
Images/2/1.jpg
Images/2/2.jpg
希望大家可以开心的完成本项目,如果你觉得有用,请收藏和点赞。
Opencv项目实战:04 全景图片拼接相关推荐
- 拉钩网前端项目实战04
拉钩网前端项目实战 拉钩网前端项目实战04 banner和content设计 一.banner部分设计 1.html部分 <div class="banner">< ...
- Python项目实战 —— 04. 淘宝用户行为分析
Python项目实战 Python项目实战--目录 Python项目实战 -- 04. 淘宝用户行为分析 一.背景 二.解题思路 三.数据分析 3.1 数据清洗 3.2 数据分析 3.2.1 用户整体 ...
- 【Opencv项目实战】背景替换:动态背景移除与替换(cvzone+MediaPipe)
文章目录 一.项目思路 二.环境布置 2.1.cvzone安装 2.2.MediaPipe安装 2.3.常见问题 2.4.注意事项 三.算法详解 3.1.segmentor.removeBG():去除 ...
- Opencv项目实战-信用卡数字识别
Opencv项目实战:信用卡数字识别 导入库,定义展示函数 import cv2 import numpy as np from imutils import contours import myut ...
- 基于C++的OpenCV项目实战——文档照片转换成扫描文件
基于C++的OpenCV项目实战--文档照片转换成扫描文件 一.背景 前段时间都是基于Python的OpecCV进行一些学习和实践,但小的知识点并没有应用到实际的项目中:并且基于Python的版本的移 ...
- Opencv项目实战:14 手势控制音量
目录 0.项目介绍 1.项目展示 2.项目搭建 3.项目的代码与讲解 4.项目资源 5.项目总结 0.项目介绍 本篇与上一篇有很多联系,大家可以看看这篇Opencv项目实战:13 手部追踪,我们将根据 ...
- Android 利用OpenCV 的Stitcher做全景图片拼接(支持平面和球面)
开发项目中遇到一个需求 就是用手机按照顺序拍几张图片 然后将图片拼接成一张全景的照片 百度了一下 看到OpenCV 的Stitcher工具支持全景图片拼接 于是研究了一下OpenCV 花了差不多一周 ...
- 【Opencv项目实战】目标追踪:实时追踪人工标注的多个目标
文章目录 一.项目思路 二.问题清单 三.算法详解 3.1.定义目标追踪算法 3.2.初始化追踪器 3.3.更新目标追踪器 3.4.绘制目标矩形框 3.5.人工标注感兴趣目标 3.5.1.标注ROI区 ...
- Opencv项目实战:基于dlib的疲劳检测
文章目录 一.项目简介 二.算法原理 三.环境配置 3.1.dlib人脸检测器:dlib.get_frontal_face_detector() 3.2.dlib关键点定位工具:shape_predi ...
最新文章
- 前端技术周刊 2018-03-02
- 抓取html的地址怎么写,html js 获取地址栏参数
- 2021-07-12
- 2021- 10 -13 AVL树的平衡调整(有parent指针) 代码逻辑
- MySQL主主复制 外键_MySQL 组复制介绍
- Sherman-Morrison公式及其应用
- java ee ide 假死_Eclipse编辑jsp、js文件时卡死现象的解决办法汇总
- 多线程——线程间的同步通信
- 2017年网易校招题 数字翻转
- @value获取不到值
- 中国企业海外人才发展白皮书
- virtio-fs: A Shared File System for Virtual Machines
- 几个性能测试工具/框架的比较
- java 格式化日期(DateFormat)
- hbase java 分页查询_HBase伪快速分页查询
- 《算法笔记》和《算法笔记上机训练指南》学习笔记汇总
- arcgis python计算面积_如何在ARCMAP里面计算面积
- 计算机系技能比赛黑板报,技能成就梦想黑板报图文
- 第一集 斗罗世界 第六章
- 学会这一招,轻松处理图片转ico格式
热门文章
- 我说2w字可以入门ES,非但不信还打我
- JAVA实现遗传算法
- 如何让员工心甘情愿地加班
- 得“田”独厚,数字孪生技术让农业管理领域智慧起来,打造线上线下一体化发展
- 文本识别--Focusing Attention: Towards Accurate Text Recognition in Natural Images
- 碰撞检测GJK算法论文解析二
- Linux 内核协议栈之TCP连接关闭
- OpenLayers 在Vue中画点线面
- Python 一个函数快速复制sheet工作表到另一个工作簿
- 【推荐】老家中秋要贴对联?不慌,我立马写了一款免费且无限的对联生成器~