OpenCV Python – 使用SIFT实现两张图片的特征匹配

这篇具有很好参考价值的文章主要介绍了OpenCV Python – 使用SIFT实现两张图片的特征匹配。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

python sift图像配准,Opencv,opencv,人工智能,计算机视觉,机器学习,神经网络,深度学习,自然语言处理

 我们使用尺度不变特征变换( SIFT )特征描述符和暴力匹配算法实现两张图像的特征匹配。其中, SIFT 用于找到图像中的关键点和描述符,而 暴力匹配算法 用于在两张图像中匹配描述符。

实现步骤

要使用 SIFT 特征检查器和 暴力 匹配算法实现两张图像的特征匹配,可以按照以下步骤操作−

  • 导入必要的库 OpenCV、Matplotlib和NumPy 。确保您已安装它们。
  • 使用灰度图像的 cv2.imread() 读取两张输入图像。指定图像的完整路径。

  • 使用 sift=cv2.SIFT_create() 方法初始化SIFT对象,设置默认值。

  • 使用 sift.detectAndCompute() 方法分别在两张输入图像中检测和计算关键点’kp1’和’kp2’以及描述符’des1’和’des2’。

  • 创建一个BFmatcher对象 bf=cv2.BFMatcher() 并使用其 bf.match(des1,des2) 方法匹配描述符。它会返回匹配结果。按距离对所有匹配进行排序。

  • 使用 cv2.drawMatches() 方法在原始输入图像上绘制匹配结果。

  • 以可选方式,可以使用BFmatcher对象的方法 bf.knnMatch(des1,des2,k=2) 来匹配描述符,应用比率测试来获取最佳匹配结果,使用 cv2.drawMatchesKnn() 方法来绘制匹配结果。

  • 可视化关键点匹配结果。

让我们通过一些示例来看如何使用 SIFT 检测器和 暴力 匹配器匹配两幅图像的关键点。

输入图像

下面的图像是我们在以下示例中使用的输入文件。

python sift图像配准,Opencv,opencv,人工智能,计算机视觉,机器学习,神经网络,深度学习,自然语言处理

python sift图像配准,Opencv,opencv,人工智能,计算机视觉,机器学习,神经网络,深度学习,自然语言处理

示例

在该示例中,我们使用 SIFT 算法检测两张输入图像的关键点和描述符,并使用暴力匹配算法匹配描述符。我们还绘制了最佳50个关键点匹配结果。在此示例中,我们向 drawMatches() 传递 flags=2 来绘制匹配结果。

# 导入所需的库
import numpy as np
import cv2
import matplotlib.pyplot as plt

# 将两个输入图像读取为灰度图像
img1 = cv2.imread('bmw.jpg',0)
img2 = cv2.imread('bmw-rotated.jpg',0)

# 初始化 SIFT 检测器
sift = cv2.SIFT_create()

# 检测和计算具有 SIFT 的关键点和描述符
kp1, des1 = sift.detectAndCompute(img1,None)
kp2, des2 = sift.detectAndCompute(img2,None)

# 创建 BFMatcher 对象
bf = cv2.BFMatcher()

# 匹配描述符。
matches = bf.match(des1,des2)

# 基于距离对匹配项进行排序
matches = sorted(matches, key=lambda val: val.distance)

# 绘制前50个匹配项。
out = cv2.drawMatches(img1, kp1, img2, kp2, matches[:50], None, flags=2)
plt.imshow(out), plt.show()

输出

在执行时,它将产生以下 输出 -

python sift图像配准,Opencv,opencv,人工智能,计算机视觉,机器学习,神经网络,深度学习,自然语言处理

例子

在此示例中,我们使用 SIFT 算法检测两个输入图像的关键点和描述符,并使用基于 Brute Force 的 匹配器 以将描述符匹配。另外,我们绘制最佳的50个关键点匹配项。在本示例中,我们传递标志= 0给 drawMatches() 以绘制匹配项。

# 导入需要的库
导入 numpy 作为 np
导入 cv2
导入 matplotlib.pyplot 作为 plt

# 读取两个灰度输入图像
img1 = cv2.imread('bmw.jpg',0) # 第一张图像
img2 = cv2.imread('bmd-rotated.jpg',0) # 第二张图像

# 初始化SIFT检测器
sift = cv2.SIFT_create()

# 使用SIFT检测器检测和计算关键点和描述子
kp1, des1 = sift.detectAndCompute(img1,None)
kp2, des2 = sift.detectAndCompute(img2,None)

# 创建BFMatcher对象
bf = cv2.BFMatcher()
matches = bf.knnMatch(des1,des2, k=2)

# 应用比值测试
good = []
for m,n in matches:
   if m.distance < 0.1*n.distance:
      good.append([m])

# cv2.drawMatchesKnn需要一个列表的列表作为匹配列表
img3 = cv2.drawMatchesKnn(img1,kp1,img2,kp2,good,None,flags=0)
plt.imshow(img3),plt.show()

输出

在执行时,将会生成以下 输出 −

python sift图像配准,Opencv,opencv,人工智能,计算机视觉,机器学习,神经网络,深度学习,自然语言处理

 为帮助更多对人工智能感兴趣的小伙伴们能够有效的系统性的学习以及论文的研究,小编特意制作整理了一份人工智能学习资料给大家,整理了很久,非常全面。

大致内容包括一些人工智能基础入门视频和文档+AI常用框架实战视频、计算机视觉、机器学习、图像识别、NLP、OpenCV、YOLO、pytorch、深度学习与神经网络等学习资料、课件源码、国内外知名精华资源、以及AI热门论文等全套学习资料。
python sift图像配准,Opencv,opencv,人工智能,计算机视觉,机器学习,神经网络,深度学习,自然语言处理

 需要以上这些文中提到的资料,请点击此处→【人工智能全套完整VIP资料】即可免费获取。

看完三件事❤️

  • 如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙:
  • 点赞,转发,有你们的 『点赞和评论』,才是我创造的动力。
  • 关注作者公众号 『 python深度学习NLP 』,不定期分享原创知识。
  • 关注后回复【666】扫码即可获取学习资料包。
  • 同时可以期待后续文章ing🚀。

python sift图像配准,Opencv,opencv,人工智能,计算机视觉,机器学习,神经网络,深度学习,自然语言处理

 文章来源地址https://www.toymoban.com/news/detail-768229.html

到了这里,关于OpenCV Python – 使用SIFT实现两张图片的特征匹配的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于SIFT图像特征识别的匹配方法比较与实现

    目前常用的匹配器有 BFMatcher and FlannBasedMatcher 1.1 BFMatcher BFMatcher 全称是 Brute-Force Matcher (直译即为暴力匹配器) 大致原理: 对于 img1 中的每个描述符, BFMatcher 将其与 img2 中的所有描述符进行比较;它计算两个描述符之间的距离度量(例如,欧几里得距离或汉明距离,默认使

    2024年02月09日
    浏览(47)
  • 【计算机视觉、关键点检测、特征提取和匹配】基于SIFT、PCA-SIFT和GLOH算法在不同图像之间建立特征对应关系,并实现点匹配算法和图像匹配(Matlab代码实现)

    💥💥💞💞 欢迎来到本博客 ❤️❤️💥💥 🏆博主优势: 🌞🌞🌞 博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️ 座右铭: 行百里者,半于九十。 📋📋📋 本文目录如下: 🎁🎁🎁 目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Matlab代码、数据、文章

    2024年03月14日
    浏览(55)
  • 学习笔记:Opencv实现图像特征提取算法SIFT

    2023.8.19 为了在暑假内实现深度学习的进阶学习,特意学习一下传统算法,分享学习心得,记录学习日常 SIFT的百科: SIFT = Scale Invariant Feature Transform, 尺度不变特征转换 全网最详细SIFT算法原理实现_ssift算法_Tc.小浩的博客-CSDN博客 在环境配置中要配置opencv: pip install opencv-c

    2024年02月12日
    浏览(48)
  • SIFT算法 特征匹配

    一、SIFT算法 参考链接 【OpenCV】SIFT原理与源码分析 DOG尺度空间构造(Difference of Gaussian) 首先是对原特征图下采样可以得到金字塔形状的多分辨率空间,作为特征金字塔,该特征金字塔可以方便提取出不同尺度的特征(感觉这里也可以叫多尺度空间) 多尺度空间:利用高斯

    2024年02月04日
    浏览(33)
  • 【教程】Autojs使用OpenCV进行SIFT/BRISK等算法进行图像匹配

    转载请注明出处:小锋学长生活大爆炸[xfxuezhang.cn]         此代码可以替代内置的images.findImage函数使用,但可能会误匹配,如果是对匹配结果要求比较高的,还是得谨慎使用。

    2024年02月07日
    浏览(49)
  • SIFT 算法 | 如何在 Python 中使用 SIFT 进行图像匹配

    人类通过记忆和理解来识别物体、人和图像。你看到某件事的次数越多,你就越容易记住它。此外,每当一个图像在你的脑海中弹出时,它就会将该项目或图像与一堆相关的图像或事物联系起来。如果我告诉你我们可以使用一种称为 SIFT 算法的技术来教机器做同样的事情呢?

    2024年02月13日
    浏览(42)
  • Python+Kivy+OpenCV实现图片定位和匹配

    在本文中,我们将介绍如何使用Kivy和OpenCV库来构建一个简单的图片定位工具。这个工具可以帮助您在一张大图片中找到与模板图片匹配的位置,并将匹配结果以矩形框的形式显示出来。 首先,我们需要安装Kivy和OpenCV库。Kivy是一个开源的Python库,用于开发多点触摸应用程序。

    2024年02月21日
    浏览(39)
  • OpenCV完美实现两张图片的全景拼接(详细教程)

    目录 1,主要步骤 1.1  导入需要的包和模块,并读取两张待拼接的图片,这里我们假设它们为 left.jpg 和 right.jpg。 1.2  创建SIFT检测器 1.3 创建一个基于 FLANN 的匹配器 1.4  筛选过程删除掉一些不合适的匹配点,只保留最好的匹配点 1.5透视变换 1.6  消除重叠的效果,对两张

    2024年02月06日
    浏览(41)
  • 3 OpenCV两张图片实现稀疏点云的生成

    前文: 1 基于SIFT图像特征识别的匹配方法比较与实现 2 OpenCV实现的F矩阵+RANSAC原理与实践 1.1 由F到E E = K T ∗ F ∗ K E = K^T * F * K E = K T ∗ F ∗ K E 矩阵可以直接通过之前算好的 F 矩阵与相机内参 K 矩阵获得 相机内参获得的方式是一个较为复杂的方式,需要使用棋盘进行定位获得

    2024年02月07日
    浏览(36)
  • python+openCV使用SIFT算法实现印章的总相似度检测

    首先整体流程是预建了一个印章库,包含若干张图片。目的是输入一张印章图片,与库里图片对比,最终显示相似度最高的三张。记一下关键代码。 1.图像预处理 主要是红色区域提取、常规灰度二值、对于形态不好的图片做个腐蚀啥的。 2.做一个霍夫圆打开,方便后续文字识

    2024年02月08日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包