首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用opencv python进行全景图像拼接

OpenCV 是一个开源的计算机视觉库,可以用于处理图像和视频

代码语言:javascript
复制
pip install opencv-python

以下是使用 OpenCV 和 Python 进行全景图像拼接的步骤:

  1. 导入所需的库:
代码语言:javascript
复制
import cv2
import numpy as np
  1. 读取要拼接的图像:
代码语言:javascript
复制
img1 = cv2.imread('image1.jpg')
img2 = cv2.imread('image2.jpg')
  1. 检测图像的关键点和描述符:
代码语言:javascript
复制
sift = cv2.SIFT_create()

kp1, des1 = sift.detectAndCompute(img1, None)
kp2, des2 = sift.detectAndCompute(img2, None)
  1. 使用 FLANN 匹配器匹配关键点:
代码语言:javascript
复制
FLANN_INDEX_KDTREE = 1
index_params = dict(algorithm=FLANN_INDEX_KDTREE, trees=5)
search_params = dict(checks=50)

flann = cv2.FlannBasedMatcher(index_params, search_params)
matches = flann.knnMatch(des1, des2, k=2)
  1. 应用比率测试筛选好的匹配:
代码语言:javascript
复制
good_matches = []
for m, n in matches:
    if m.distance < 0.7 * n.distance:
        good_matches.append(m)
  1. 计算单应性矩阵(Homography Matrix):
代码语言:javascript
复制
if len(good_matches) > 4:
    src_pts = np.float32([kp1[m.queryIdx].pt for m in good_matches]).reshape(-1, 2)
    dst_pts = np.float32([kp2[m.trainIdx].pt for m in good_matches]).reshape(-1, 2)

    M, mask = cv2.findHomography(src_pts, dst_pts, cv2.RANSAC, 5.0)
else:
    print("Not enough matches are found - {}/{}".format(len(good_matches), 4))
    M = None
  1. 使用单应性矩阵将图像进行拼接:
代码语言:javascript
复制
h1, w1 = img1.shape[:2]
h2, w2 = img2.shape[:2]

pts1 = np.float32([[0, 0], [0, h1], [w1, h1], [w1, 0]]).reshape(-1, 1, 2)
pts2 = np.float32([[0, 0], [0, h2], [w2, h2], [w2, 0]]).reshape(-1, 1, 2)

dst_pts1 = cv2.perspectiveTransform(pts1, M)
dst_pts2 = cv2.perspectiveTransform(pts2, M)

dst_pts = np.concatenate((dst_pts1, dst_pts2), axis=0)
[xmin, ymin] = np.int32(dst_pts.min(axis=0).ravel() - 0.5)
[xmax, ymax] = np.int32(dst_pts.max(axis=0).ravel() + 0.5)

t = [-xmin, -ymin]
Ht = np.array([[1, 0, t[0]], [0, 1, t[1]], [0, 0, 1]])

result = cv2.warpPerspective(img2, Ht.dot(M), (xmax-xmin, ymax-ymin))
result[t[1]:h1+t[1], t[0]:w1+t[0]] = img1
  1. 显示拼接后的全景图像:
代码语言:javascript
复制
cv2.imshow('Panorama', result)
cv2.waitKey(0)
cv2.destroyAllWindows()
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

使用OpenCV进行图像全景拼接

图像拼接是计算机视觉中最成功的应用之一。如今,很难找到不包含此功能的手机或图像处理API。在本文中,我们将讨论如何使用PythonOpenCV进行图像拼接。...也就是,给定两张共享某些公共区域的图像,目标是“缝合”它们并创建一个全景图像场景。当然也可以是给定多张图像,但是总会转换成两张共享某些公共区域图像拼接的问题,因此本文以最简单的形式进行介绍。...本文主要的知识点包含一下内容: 关键点检测 局部不变描述符(SIFT,SURF等) 特征匹配 使用RANSAC进行单应性估计 透视变换 我们需要拼接的两张图像如下: 特征检测与提取 给定上述一对图像...我们要使用OpenCV创建BruteForce Matcher,一般情况下,我们只需要指定2个参数即可。第一个是距离度量。第二个是是否进行交叉检测的布尔参数。...我们可以使用OpenCV warpPerspective()函数。它以图像和单应矩阵作为输入。

1.8K10

python opencv进行图像拼接

本文实例为大家分享了python opencv进行图像拼接的具体代码,供大家参考,具体内容如下 思路和方法 思路 1、提取要拼接的两张图片的特征点、特征描述符; 2、将两张图片中对应的位置点找到,匹配起来...因为只是进行全景拼接,在使用SURF时,还可以调节它的参数,减少一些关键点,只获取64维而不是128维的向量等,加快速度。...2、在分别提取好了两张图片的关键点和特征向量以后,可以利用它们进行两张图片的匹配。在拼接图片中,可以使用Knn进行匹配,但是使用FLANN快速匹配库更快,图片拼接,需要用到FLANN的单应性匹配。...使用opencv指南中图像金字塔的代码对拼接好的图片进行处理,整个图片平滑了,中间的缝还是特别突兀。...python_opencv中主要使用的函数 0、基于python 3.7和对应的python-opencv 1、cv2.xfeatures2d.SURF_create ([hessianThreshold

3.7K10
  • Python+OpenCV实现图像全景拼接

    本文实例为大家分享了Python+OpenCV实现图像全景拼接的具体代码,供大家参考,具体内容如下 环境:python3.5.2 + openCV3.4 1.算法目的 将两张相同场景的场景图片进行全景拼接...2.算法步骤 本算法基本步骤有以下几步: 步骤1:将图形先进行桶形矫正 没有进行桶形变换的图片效果可能会像以下这样: ? 图片越多拼接可能就会越夸张。 ? 本算法是将图片进行桶形矫正。...步骤2:特征点匹配 本算法使用的sift算法匹配,它具有旋转不变性和缩放不变性,具体原理在之后会补上一篇关于sift算法的文章,这里就不做详细介绍。...步骤3:利用得到的变换矩阵进行图片的拼接。 可以看出基本做到了无缝拼接。只是在色差上还是看得出衔接的部分存在。 ? 实现结果 我在宿舍里又多照了几组照片来实验: 室内宿舍场景的特征点匹配: ?...h, w = img1.shape[:2] # 使用得到的变换矩阵对原图像的四个角进行变换,获得目标图像上对应的坐标 pts = np.float32([[0, 0], [0, h-1], [w-1,

    1.8K40

    基于OpenCV全景拼接Python

    翻译自https://www.pyimagesearch.com 基于OpenCVPython)的图片拼接全景图构建。“缝合”两张有重叠区域的图来创建一张全景图。...在之后的博客会解决多张图片的拼接,而不仅仅只是针对两张图片。 OpenCV全景拼接 全景拼接算法有四部分组成 Step1:从输入的两张图片里检测关键点、提取局部不变特征。...用NumPy来进行矩阵操作。imutils是一套OpenCV的工具包。最后把cv2导入OpenCV。 在第6行定义了Stitcher类,可以检测我们是否使用OpenCV3。...这种方法需要我们通过两张原始图像来对每个图像的关键点进行设置,应用Lowe’s ratio 试验后的初始匹配,和最后由单应计算提供的状态列表。...全景拼接测试 python stitch.py --first images/bryce_left_01.png --second images/bryce_right_01.png python stitch.py

    7.3K40

    python实现图像全景拼接

    图像全景拼接包括三大部分:特征点提取与匹配、图像配准、图像融合。 1、基于SIFT的特征点的提取与匹配 利用Sift提取图像的局部特征,在尺度空间寻找极值点,并提取出其位置、尺度、方向信息。...为了提高图像配准的精度,本节采用RANSAC算法对图像变换矩阵进行求解与精炼,达到了较好的图像拼接效果。...总结: 本文分别针对室内和室外两种情况对两张图像全景拼接,发现室内情况下拼接的效果较为好。...本实验最初是用opencv-contrib3.4.5版本,但是由于sift的专利限制无法使用,随后用opencv-contriv3.4.2代码可以运行,不会出现问题。...方法:先卸载当前版本的opencv并安装: pip install -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-contrib-python==

    1.9K20

    Python实现图像全景拼接

    基本介绍 图像全景拼接,即“缝合”两张具有重叠区域的图来创建一张全景图。...具体步骤 (1)检测左右两张图像的SIFT关键特征点,并提取局部不变特征 ; (2)使用knnMatch检测来自右图(左图)的SIFT特征,与左图(右图)进行匹配 ; (3)计算视角变换矩阵H,用变换矩阵...H对右图进行扭曲变换; (4)将左图(右图)加入到变换后的图像的左侧(右侧)获得最终图像; 代码: import cv2 as cv # 导入opencv包 import numpy as...ratio * n.distance: good.append(m) # 返回匹配的关键特征点集 return good # 计算视角变换矩阵H,用H对右图进行变换并返回全景拼接图像...扭曲变换后的右图 全景图 由于输入的左右图像之间有大量重叠,导致全景图的主要添加部分是在拼接图像的右侧,因此会造成拼接全景图右侧有大量的黑色空白区域。

    1.5K10

    apap图像全景拼接

    图像配准(apap)是将两张场景相关的图像进行映射,寻找其中的关系,多用在医学图像配准、图像拼接、不同摄像机的几何标定等方面,其研究也较为成熟。...OpenCv中的stitching类就是使用了2007年的一篇论文(Automatic panoramic image stitching using invariant features)实现的。...4、使用DLT算法(Multiple View Geometry p92提到),将剩下的特征点对进行透视变换矩阵的估计。...(1)测试图片如下: (2) sift特征匹配: (3)全景图像拼接: 实验小结:该组实验测试图片拍摄位置选定,在原地转换角度从左到右依次拍摄,因此图片基本处于同一水平。...3.2场景二 针对同一场景(视差变化大的场景),更换拍摄位置,实现图像拼接融合 (1)测试图片如下: (2)sift特征匹配: (3)全景图片拼接: 实验小结: 在这组实验中

    1.2K30

    图像配准】使用OpenCV进行多图配准拼接

    图像拼接创建步骤 通常来说,根据多个图像创建全景图的步骤为以下几步: 检测两张图像的关键点特征(DoG、Harris等) 计算不变特征描述符(SIFT、SURF或ORB等) 根据关键点特征和描述符...,对两张图像进行匹配,得到若干匹配点对,并移除错误匹配; 使用Ransac算法和匹配的特征来估计单应矩阵(homography matrix); 通过单应矩阵来对图像进行仿射变换; 两图像拼接,重叠部分融合...(images)两行内容,下面的方式是对拼接完的图像进行裁剪,以便找到其中的最大矩形。...其中,status表示是否拼接成功,主要由四个值: OK=0 :图像拼接成功。 ERR_NEED_MORE_IMGS=1 :这表明构建全景图像需要输入更多的输入图像。...[2]你相机里的全景图是如何实现的 https://zhuanlan.zhihu.com/p/83225676 [3]PyImageSearch学习笔记三(使用Opencv拼接全景地图二)https

    3.8K20

    OpenCV 图像拼接 优化

    前面一篇文件 https://blog.csdn.net/zhanggqianglovec/article/details/103344658 讲述了如果将多个影像拼接为一个大的影像,本文将讲述...一些上面工具在使用过程中的问题及其优化 1....OpenCV 2.4.9 64位的编译 4.1 OpenCV下载: Opencv库的编译相对来说简单,通过Cmake直接可编译,问题是Opencv的源码获取比较麻烦...4.2 OpenCV工程生成: 在选择 Visual Studio 编译版本的时候需要注意下,Opencv 有区分 X86,X64 和 IA及RAM的编译,这个需要根据自己的情况进行选择...5.1 Cholmod的获取 网上关于Cholmod的讲解很少,在网上找了很久,找到了SuiteSparse这个产品,SuiteSparse是一个产品套件,里面包含了很多图像相关的处理库

    10910

    OpenCV 实现多张图像拼接

    图像拼接Stitch模块算法流程与代码使用介绍 拼接算法 OpenCV中从2.4.x版本之后多出来一个新的模型 图像拼接,该模块通过简单的高级API设置,可以获得比较好的图像拼接效果,OpenCV官方提供了一个高度集成的...API函数 Stitcher,只要两行代码就可以得到一个很好的拼接图像。...可见图像拼接是一个很复杂的算法,是由一系列的基础算法构成,这些基础算法如果你不是很了解,其实很难实现自己的图像拼接,这其中影响拼接算法stitch工作最常见几个算法子模块为: 特征发现与描述子 常见的特征可以选择...SIFT、SURF、AKAZE、ORB等特征算子进行匹配 相机参数 不同的相机参数与设置会导致不同的结果 融合方式(blender) 不同的融合方式,也会导致不同结果 各种阈值设置,特别是config...代码演示 另外在拼接的时候可以设置不同warper,这样会对拼接之后的图像生成不同效果,常见的效果包括 鱼眼相机 环视(平面曲翘) 默认 图示分别如下: ? ? ?

    2.9K20

    使用OpenCVPython进行图像处理

    p=13173 ---- 介绍 在本教程中,我们将学习如何使用Python语言执行图像处理。我们不会局限于单个库或框架;但是,我们将最常使用的是Open CV库。...因此,单个图像将有三个这样的矩阵。 安装 注意:由于我们将通过Python使用OpenCV,因此隐含的要求是您的工作站上已经安装了Python(版本3)。...windows $ pip install opencv-python 苹果系统 $ brew install opencv3 --with-contrib --with-python3 Linux $...sudo apt-get install libopencv-dev python-opencv 要检查安装是否成功,请在Python Shell或命令提示符中运行以下命令: import cv2 您应该知道的一些基本知识...结论 在本文中,我们学习了如何在Windows,MacOS和Linux等不同平台上安装OpenCV(用于Python图像处理的最流行的库),以及如何验证安装是否成功。

    2.8K20

    OpenCV 实现多张图像拼接

    图像拼接Stitch模块算法流程与代码使用介绍 拼接算法 OpenCV中从2.4.x版本之后多出来一个新的模型 图像拼接,该模块通过简单的高级API设置,可以获得比较好的图像拼接效果,OpenCV官方提供了一个高度集成的...API函数 Stitcher,只要两行代码就可以得到一个很好的拼接图像。...可见图像拼接是一个很复杂的算法,是由一系列的基础算法构成,这些基础算法如果你不是很了解,其实很难实现自己的图像拼接,这其中影响拼接算法stitch工作最常见几个算法子模块为: 特征发现与描述子 常见的特征可以选择...SIFT、SURF、AKAZE、ORB等特征算子进行匹配 相机参数 不同的相机参数与设置会导致不同的结果 融合方式(blender) 不同的融合方式,也会导致不同结果 各种阈值设置,特别是config...threshold,如果无法特征匹配,记得把这个阈值调小点 其它参数可以如何设置可以参考OpenCV的官方文档,总之无法拼接就去调参数,一般最后都会拼接成功,此外该算法速度比较慢,但是支持GPU执行,所以想要实时的可以尝试如何

    4.1K22

    使用 OpenCV 进行图像分割

    代码实现 导入库 加载输入图像并在 OpenCV进行处理 执行分段的步骤: 将图像转换为RGB格式 将图像重塑为由像素和 3 个颜色值 (RGB) 组成的二维数组 cv2.kmeans() 函数将二维数组作为输入...该过程遵循一种简单易行的方法,通过一定数量的先验固定的集群对给定图像进行分类。 该算法实际上从图像空间被划分为 k 个像素的开始,表示 k 个组质心。...Python 库像scikit-image、OpenCV、Mahotas、Pillow、matplotlib、SimplelTK 等,被广泛用于实现图像处理,尤其是图像分割。...使用 Python 实现图像分割是广受欢迎的技能,并且有很多相关的培训可供使用。...使用 python 库是一种更简单的实现方式,它在使用之前不需要任何复杂的要求——当然除了 Python 编程和 Pandas 的基本知识。

    2.1K21

    OpenCV图像拼接改进算法之完美拼接

    前言概述 之前写了两篇文章分别是图像单应性矩阵变换与图像拼接图像拼接使用单应性矩阵实现图像特征对齐,从而为图像拼接特别是无缝拼接打下基础,看一下上一篇我的图像拼接效果如下: ?...最终改进之后的两张图像拼接效果如下: ? 是不是一个完美的无缝图像拼接我说了不算,大家说了算,欢迎留言反馈!...首先是图像特征提取与求单应性矩阵,这步可以省略了。代码可以参考上一篇文章即可。 使用单应性矩阵求得右侧变换之后的图像跟mask 根据mask得权重mask层 最后跟之前的一致,直接融合即可。...拼接融合之后图像: ? 推荐阅读 2019原创技术文章汇总 2018年原创技术文章汇总 OpenCV4系统化学习路线图-视频版本!...OpenCV单应性矩阵发现参数估算方法详解 单应性矩阵应用-基于特征的图像拼接

    13.2K62

    OpenCV 4基础篇| OpenCV图像拼接

    retval:拼接后的图像,nparray 多维数组 1.1 注意事项 np.hstack() 按水平方向(列顺序)拼接 2个或多个图像图像的高度(数组的行)必须相同。...np.vstack()按垂直方向(行顺序)拼接 2个或多个图像图像的宽度(数组的列)必须相同。 综合使用 np.hstack() 和np.vstack() 函数,可以实现图像的矩阵拼接。...np.hstack() 和 np.vstack() 只是简单地将几张图像直接堆叠而连成一张图像,并未对图像进行特征提取和边缘处理,因而并不能实现图像全景拼接。...使用的是BGR模式,而matplotlib使用的是RGB模式,所以需要将opencv中的BGR、GRAY格式转换为RGB,使matplotlib中能正常显示opencv图像。...NumPy 的拼接操作通常比 matplotlib 更快,因为 matplotlib 的主要目的不是图像处理。 可以先用 NumPy 进行图像拼接,然后用 matplotlib 来显示结果。

    26600

    概述 | 全景图像拼接技术全解析

    前言 图像/视频拼接的主要目的是为了解决相机视野(FOV-Field Of View)限制,生成更宽的FOV图像/视频场景。...视频拼接在体育直播、全景显示、数字娱乐、视频处理中都被广泛应用,同时视频/图像拼接涉及到矫正图像、对其与匹配图像、融合、统一光照、无缝连接、多尺度重建等各个图像算法模型与细节处理,可以说是图像处理技术的综合运用...特别是最近几年收到深度学习的影响,各种基于深度学习的图像对齐与拼接技术也取得了长足发展。...01 图像拼接流程 图像拼接流程主要是针对输入系列视频帧或者图像,基于像素像素或者特征点相似然后对齐图像、融合对齐之后的图像,更新全景图像拼接结果,图示如下: ?...针对不同的拼接方式可以分为图像拼接、视频拼接全景拼接。针对图像拼接可以分为像素相似与特征相似;视频拼接又分为固定相机、移动相机;全景拼接分为单相机、相机列阵、鱼眼相机列阵。图示如下: ? ?

    1.9K30

    OpenCV图像拼接函数vconcat()&hconcat()

    OpenCV图像直接拼接方法下面链接已做介绍,OpenCV常用图像拼接方法(一) :直接拼接 ,只是这次我们将使用现成的函数实现,它们是vconcat()和hconcat(),当然也有一些细微差异。...vconcat()---垂直方向拼接,要求待拼接图像有相同的宽度; hconcat()---水平方向拼接,要求待拼接图像有相同的高度。...这里的区别可以明显看出,上次介绍的直接拼接方法是自定义最终拼接图像的大小,所以对待拼接图像的尺寸没有要求。但是使用vconcat()和hconcat()拼接则要求待拼接图像有相同的宽度或高度。...两种方法对于相同的待拼接图像,耗时差异不大(笔者做过对比),所以如果你的待拼接图像宽度或高度满足要求时,可以直接使用vconcat()和hconcat(),既简单又方便。...C++ OpenCV Demo实例如下: #include #include using namespace std; using namespace

    9K30
    领券