基于OpenCv的图像全景拼接

⚠申明: 未经许可,禁止以任何形式转载,若要引用,请标注链接地址。 全文共计6757字,阅读大概需要3分钟
🌈更多学习内容, 欢迎👏关注👀【文末】我的个人微信公众号:不懂开发的程序猿
个人网站:https://jerry-jy.co/

❗❗❗知识付费,🈲止白嫖,有需要请后台私信或【文末】个人微信公众号联系我

基于OpenCv的图像全景拼接

任务需求

图像拼接的主要目的是为了解决相机视野限制,生成更宽的图像场景。简单来说图像拼接技术就是把若干幅有重叠部分的图像合成一幅大视角宽幅面的图像。图像拼接技术已普遍出现在海洋和矿产勘测、卫星遥感探索、医学成像、计算机特效生成以及近期热门的虚拟现实等领域。

本次实验是基于特征点匹配的全景图像拼接算法,首先提取各图像中的SIFT特征,通过特征点匹配完成两幅图像的配准;再根据图像配准结果计算出图像间的变换矩阵;最后通过视角变换矩阵变换图像进行拼接。

在这里插入图片描述

任务目标

1、掌握基于OpenCv提取SIFT特征点

2、掌握基于OpenCv使用SIFT描述子进行Brute-Force蛮力匹配

3、掌握基于OpenCv计算单应性矩阵

任务环境

1、jupyter开发环境

2、OpenCv

3、python3.6

任务实施过程

一、图像全景拼接

图像全景拼接具体地说就是使用多个摄像机对同一个场景在不同角度拍摄,把得到的多个图像进行校正、去噪、匹配、融合,最终构建成一个质量高、清晰、边缘平滑、分辨率高的图像。

1.导入所需要的工具包和图像
import cv2 # 导入opencv
import matplotlib.pyplot as plt # 导入绘图模块
import numpy as np # 导入numpy库
from utils import im_show # 导入显示图像函数
# 绘制图像直接展示,不用调用plt.show()
%matplotlib inline 
# 用来正常显示中文标签
plt.rc('font',family="SimHei")
# 读取拼接图像(右边,左边)
imgA = cv2.imread(r'./experiment/data/2.jpg')
imgB = cv2.imread(r'./experiment/data/1.jpg')
# 设置画布大小
plt.figure(figsize=(15,12))
# 显示图像
im_show('原图像',np.hstack((imgA,imgB)))

在这里插入图片描述

2.提取A、B图片SIFT特征描述子
# 先将两张照片转换成灰度图
grayA = cv2.cvtColor(imgA, cv2.COLOR_BGR2GRAY)
grayB = cv2.cvtColor(imgB, cv2.COLOR_BGR2GRAY)
# 建立SIFT生成器
descriptor = cv2.SIFT_create()
# 检测两个图像的SIFT特征点,并计算描述子
kpsA, featuresA = descriptor.detectAndCompute(grayA, None)
kpsB, featuresB = descriptor.detectAndCompute(grayB, None)
print('图像A和B的提取的SIFT关键点个数:',len(kpsA),len(kpsB))
# 将得到的关键点坐标转换成NumPy数组
# kpsA = np.float32([kpA.pt for kpA in kpsA])
# kpsB = np.float32([kpB.pt for kpB in kpsB])

在这里插入图片描述

3.Brute-Force蛮力匹配两张图片所有特征点
# 创建BFMatcher对象,使用默认参数做蛮力匹配
matcher = cv2.BFMatcher()
# 使用KNN检测来自A、B图的SIFT特征匹配对,K=2表示一个特征点对应与它最佳匹配的2个特征点
rawMatches = matcher.knnMatch(featuresA, featuresB, k=2)
# 应用比率测试
# 使用for循环,设一个特征点对应的两个特征点的距离m和n
# 如果m<0.75n(
  • 15
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不懂开发的程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值