欢迎来到我们的第二个图像拼接教程部分,在那里我们将完成第一个教程部分,我们将收到拼接的图像。
因此,以下是我们第一个教程中的步骤列表,说明我们应该做些什么才能获得最终的缝合结果:
1.计算左右图像的SIFT关键点和描述符;2.计算一幅图像中的每个描述符与另一幅图像中的每个描述符之间的距离;3.为图像的每个描述符选择最匹配的前几个描述符;4.运行RANSAC以估计单应单应;5.翘曲以对齐以进行拼接;6.最后,将它们拼接在一起。
在我们的第一个教程中,我们做了最多的工作。在上一个教程中,我们已经完成了前三个步骤,所以剩下的三个步骤要做。剩下的只有几行代码。
因此,一旦我们获得了图像之间的最佳匹配,下一步就是计算单应矩阵。如前所述,单应矩阵将与最佳匹配点一起使用来估计两个图像内的相对方向变换。
在OpenCV中估计单应是一项简单的任务。这是一行代码:
在开始编码拼接算法之前,我们需要交换图像输入。所以“img_”将拍摄右侧的图像,“img”将拍摄左侧的图像。
因此,让我们跳到缝合编码:
因此,首先,我们将最小匹配条件COUNT设置为10(由MIN_MATCH_COUNT定义),并且仅当良好匹配超过所需匹配时才进行缝合。否则,显示一条消息,说明没有足够的匹配项。
因此,在if语句中,我们将关键点(来自匹配列表)转换为findHomography()函数的参数。我不能详细解释这件事,因为我没有时间喋喋不休,那是没有用的。
简单地说,在此代码行cv2.imshow(“Original_image_overlapping.jpg”,img2)中,我们显示的是接收到的图像重叠区域:
所以,一旦我们建立了单应性,我们就需要扭曲视角,从根本上改变视野。我们将以下单应矩阵应用于图像:
因此,我们按如下方式使用:
在上面的两行代码中,我们从两个给定的图像中获取重叠区域。然后,在“dst”中,我们只收到图像的右侧不重叠的部分,因此在第二行代码中,我们将左侧图像放到最终图像。因此,在这一点上,我们有了一个完全缝合的图像:
因此,从这一点开始,剩下的就是删除图像的暗面,因此我们将编写以下代码来删除所有图像边框中的黑色字体:
这是最终定义的函数,我们调用它来裁剪边框,同时,我们在屏幕上显示该图像。如果需要,也可以将其写入磁盘:
使用上面的代码,我们将收到最初的原始图像:
以下是完整的最终代码:
结论:
这些教程教会了我们如何使用OpenCV实现和执行图像拼接和全景构建,并编写了图像拼接的最终代码。
要使用我们的算法拼接图像,需要完成四个主要步骤:
当仅为两幅图像构建全景图时,该算法在实际应用中效果良好。
最初发表于https://pylessons.com/OpenCV-image-stiching-continuehttps://pylessons.com/OpenCV-image-stiching-continue
原创文章,作者:fendouai,如若转载,请注明出处:https://panchuang.net/2021/07/13/opencv%e5%9b%be%e5%83%8f%e6%8b%bc%e6%8e%a5%e7%ac%ac%e4%ba%8c%e9%83%a8%e5%88%86/