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)函数,他会返回一个包含了此路径下的列表如下所示:
文章图片
【Opencv项目实战|Opencv项目实战(04 全景图片拼接)】
- 其次,我们已经知道在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
文章图片
希望大家可以开心的完成本项目,如果你觉得有用,请收藏和点赞。
文章图片
推荐阅读
- Python代码|Python 加减计算闯关小游戏
- Python|Python和PHP有什么区别
- python|2022最全的 App 应 用 测 试 技 巧
- 计算机智能算法|计算机智能专题-遗传算法(1不带约束的)
- 机器学习|分布式机器学习---数据与模型划分
- 牛客|Python快速刷题网站——牛客网 数据分析篇(十一)
- 废掉小脑阔的错误|上采样、下采样区别及作用
- C#|多次握手登录
- 树莓派|树莓派接入阿里云IOT平台1(Python模拟数据上传)