1. 磐创AI-开放猫官方网站首页
  2. Medium

OpenCV图像拼接游戏攻略

您可能已经知道Google Photos应用程序具有独特的自动功能,如视频创建、全景图像拼接、图像拼贴创建、图像排序等。您有没有想过所有这些功能是如何工作的?所以我想,使用Python语言独自进行全景合并可能有多困难。

那么什么是图像拼接呢?输出是合成图像,因此它是图像场景的顶点。简单地说,对于输入,应该有一组图片,但同时必须保留图像之间的逻辑流程。

例如,在拍摄几张海平面照片的同时,想一想海平面。从本质上讲,我们从一组这样的图像中创建一张拼接的图像,详细解释整个场景。这是一个相当有趣的算法。

我们先来了解一下图像拼接的概念。如果你想捕捉一个大场景,而你的相机只能提供特定分辨率的图像,而那个分辨率是640×480,那么捕捉大全景肯定是不够的。因此,我们可以捕捉整个场景的多个图像,然后将所有的零碎放在一张大照片中。这样的收藏区域单位的有序场景的照片被称为全景图。获取多个图像并将它们合并到这样的全景图中的整个过程称为图像拼接。最后,我们有一张美丽的大照片和一张风景的大照片。

首先,我们将安装OpenCV版本3.4.2.16。如果您有较新的版本,请先执行pip卸载OpenCV,然后再安装较旧的版本。如果您使用的是较新版本,则需要自行构建OpenCV库才能启用图像拼接功能,因此安装较旧版本要容易得多:

pip install opencv-contrib-python==3.4.2.16

接下来,我们导入将在代码中使用的库:

我们为我们的教程拍摄了这张漂亮的照片,我们将把它切成两张左右的图像,然后我们会试着拿回相同或非常相似的图像。

所以我把这张图片切成两张有重叠区域的图片:

因此,以下是我们应该执行的步骤列表,以获得最终的缝合结果:

因此,从第一步开始,我们导入这两幅图像并将其转换为灰度。如果您使用的是大图像,我建议您使用cv2.resize,因为如果您有一台较旧的计算机,它可能会很长,并且需要相当长的时间。如果要调整图像大小,即50%,请从fx=1更改为fx=0.5。

我们还需要找出与两张照片相匹配的特征。我们将使用opencv_contrib的opencv_contrib的SIFT描述符。SIFT(尺度不变特征变换)是一种功能非常强大的OpenCV算法。您可以在SIFT for Image上阅读更多OpenCV的OpenCV文档,以了解更多有关功能的信息。这些最佳匹配的属性是图像拼接的基础。我们将这两幅图像的要点和描述区分如下:OpenCV’sOpenCV’s docs on SIFT

KP1和KP2是要点,des1和des2是各自图像的描述。如果我们显示此带有功能的图像,它将如下所示:

左边的图像显示了实际图像。右侧的图像使用SIFT检测到的特征进行注释:

一旦您获得了这两幅图像的描述符和关键点,我们就会找到它们之间的对应关系。我们为什么要这么做?嗯,要把任何两幅图像拼接成一幅更大的图画,我们必须找到重叠点。这些重叠点将根据第一幅图像让我们了解第二幅图像的方向。基于这些共同点,我们可以知道第二幅图像是更大还是更小,或者是旋转然后重叠,或者可能是缩小/放大然后进行拟合。所有这些信息都是通过建立对应关系来产生的。这个过程叫做注册。

要匹配图像,可以使用OpenCV提供的Flann或BFMatcher方法。我会写两个例子来证明我们会得到相同的结果。这两个示例都执行图像匹配,并查找两张照片中最相似的特征。例如,如果我们设置参数k=2,我们会要求KnnMatcher为每个描述符返回两个最佳匹配项。这些“匹配”返回列表,其中每个子组由“k”个对象组成。要了解更多信息,请访问此处。下面是代码:here

Flann Matcher代码:

BFMatcher匹配器编码:

通常,可以在图像中的许多地方存在图像中的许多可能性。为了解决这个问题,我们过滤找到所有匹配的,以获得最好的。为此,我们使用上面获得的两个最佳匹配应用测试比率。如果下面定义的比率比我们指定的更重要,则我们决定找到匹配项。

现在,我们正在定义在图像上绘制线条的参数,并给出输出,以查看在图像上找到所有匹配项时的效果:

下面是绘制了匹配项的输出图像:

以下是本教程在此之前的完整代码:

结论:

现在,在这个简短的教程中,我们完成了上面写的1-3个步骤,所以还有3个步骤要做。因此在下一个教程中,我们将找到用于图像变换的单应性。然后我们就可以进行图像拼接了。

最初发表于https://pylessons.com/OpenCV-image-stichinghttps://pylessons.com/OpenCV-image-stiching

原创文章,作者:fendouai,如若转载,请注明出处:https://panchuang.net/2021/07/13/opencv%e5%9b%be%e5%83%8f%e6%8b%bc%e6%8e%a5%e6%b8%b8%e6%88%8f%e6%94%bb%e7%95%a5/

联系我们

400-800-8888

在线咨询:点击这里给我发消息

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息