一、用法

在特征点匹配中,queryIdx和trainIdx是匹配对中的两个索引,用于指示匹配点在不同图像或特征向量中的位置。
1.假设我们有两幅图像A和B,并使用特征点提取算法(如SIFT)从它们中提取出特征点和对应的描述子。
2.在进行特征点匹配时,我们得到了一个匹配对,其中包含了两个特征点:特征点A和特征点B。
queryIdx:特征点A在图像A中的索引。
trainIdx:特征点B在图像B中的索引。
换句话说,queryIdx是指示特征点在查询图像(图像A)中的位置,而trainIdx是指示特征点在训练图像(图像B)中的位置。
举个具体的例子:
假设匹配对中的queryIdx为10,trainIdx为5。
这意味着特征点A是图像A中的第11个特征点(索引从0开始),而特征点B是图像B中的第6个特征点。
在特征点匹配中,queryIdx和trainIdx提供了特征点在不同图像中的对应关系,使我们能够在不同图像间建立联系并进行后续的操作,例如计算视角变换矩阵或进行图像配准等。

二、代码示例

import cv2
import numpy as np # 读取图像
img1 = cv2.imread('image1.jpg', 0)
img2 = cv2.imread('image2.jpg', 0) # 创建SIFT对象并检测特征点
sift = cv2.SIFT_create()
kp1, des1 = sift.detectAndCompute(img1, None)
kp2, des2 = sift.detectAndCompute(img2, None) # 创建BFMatcher对象
bf = cv2.BFMatcher() # 使用KNN算法进行特征点匹配
matches = bf.knnMatch(des1, des2, k=2) # 通过筛选最佳匹配对获取特征点坐标
good_matches = []
for m, n in matches:
if m.distance < 0.75 * n.distance:
good_matches.append(m) # 对匹配对按照距离进行排序
good_matches = sorted(good_matches, key=lambda x: x.distance, reverse=True) # 获取距离最远的前十个匹配对的特征点坐标
top_matches = good_matches[:10]
points1 = np.float32([kp1[m.queryIdx].pt for m in top_matches])
points2 = np.float32([kp2[m.trainIdx].pt for m in top_matches])
#.pt是KeyPoint类的一个属性,用于表示特征点的坐标。 # 打印匹配对中特征点的坐标
for i in range(len(top_matches)):
pt1 = tuple(map(int, points1[i]))
pt2 = tuple(map(int, points2[i]))
print(f"Match {i+1}: Point 1: {pt1}, Point 2: {pt2}")

输出结果:

Match 1: Point 1: (430, 79), Point 2: (170, 76)
Match 2: Point 1: (363, 56), Point 2: (100, 39)
Match 3: Point 1: (309, 225), Point 2: (29, 216)
Match 4: Point 1: (445, 3), Point 2: (181, 7)
Match 5: Point 1: (346, 77), Point 2: (80, 60)
Match 6: Point 1: (359, 94), Point 2: (100, 79)
Match 7: Point 1: (365, 80), Point 2: (106, 66)
Match 8: Point 1: (53, 53), Point 2: (298, 81)
Match 9: Point 1: (456, 363), Point 2: (168, 337)
Match 10: Point 1: (349, 110), Point 2: (84, 94)

————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/m0_70484757/article/details/131510009

其他参考链接:slam十四讲ch7中,DMatch类中的queryIdx和trainIdx

opencv中 在特征点匹配代码举例,以及queryIdx和trainIdx的用法的更多相关文章

  1. 对OpenCV中Haar特征CvHaarClassifierCascade等结构理解

    首先说一下这个级联分类器,OpenCV中级联分类器是根据VJ 04年的那篇论文(Robust Real-Time Face Detection)编写的,查看那篇论文,知道构建分类器的步骤如下: 1.根 ...

  2. OpenCV 中轮廓包裹的几个函数boundingRect、minAreaRect、minEnclosingCircle用法

    当我们得到对象轮廓后,可用boundingRect()得到包覆此轮廓的最小正矩形,minAreaRect()得到包覆轮廓的最小斜矩形,minEnclosingCircle()得到包覆此轮廓的最小圆形, ...

  3. [OpenCV实战]6 基于特征点匹配的视频稳像

    目录 1 介绍 1.1 视频稳定的方法 1.2 使用点特征匹配的视频稳定 2 算法 2.1 帧间运动信息获取 2.1.1 合适的特征点获取 2.1.2 Lucas-Kanade光流法 2.1.3 运动 ...

  4. [OpenCV-Python] OpenCV 中图像特征提取与描述 部分 V (二)

    部分 V图像特征提取与描述 OpenCV-Python 中文教程(搬运)目录 34 角点检测的 FAST 算法 目标 • 理解 FAST 算法的基础 • 使用 OpenCV 中的 FAST 算法相关函 ...

  5. 在OpenCV中实现matlab中的im2double功能

    最近在把matlab的代码转化到VS2010上. matlab中采用im2double将读入的图像转换为double型,在OpenCV中就需要对图像进行深度的转换. 读入一幅灰度图像,深度为1(8U) ...

  6. OpenCV使用FLANN进行特征点匹配

    使用FLANN进行特征点匹配 目标 在本教程中我们将涉及以下内容: 使用 FlannBasedMatcher 接口以及函数 FLANN 实现快速高效匹配( 快速最近邻逼近搜索函数库(Fast Appr ...

  7. 使用Opencv中matchTemplate模板匹配方法跟踪移动目标

    模板匹配是一种在图像中定位目标的方法,通过把输入图像在实际图像上逐像素点滑动,计算特征相似性,以此来判断当前滑块图像所在位置是目标图像的概率. 在Opencv中,模板匹配定义了6种相似性对比方式: C ...

  8. Opencv中使用Surf特征实现图像配准及对透视变换矩阵H的平移修正

    图像配准需要将一张测试图片按照第二张基准图片的尺寸.角度等形态信息进行透视(仿射)变换匹配,本例通过Surf特征的定位和匹配实现图像配准. 配准流程: 1. 提取两幅图像的Surf特征 2. 对Sur ...

  9. 第二篇 特征点匹配以及openvslam中的相关实现详解

    配置文件 在进入正题之前先做一些铺垫,在openvslam中,配置文件是必须要正确的以.yaml格式提供,通常需要指明使用的相机模型,ORB特征检测参数,跟踪参数等. #==============# ...

  10. opencv中的SIFT,SURF,ORB,FAST 特征描叙算子比较

    opencv中的SIFT,SURF,ORB,FAST 特征描叙算子比较 参考: http://wenku.baidu.com/link?url=1aDYAJBCrrK-uk2w3sSNai7h52x_ ...

随机推荐

  1. 神经网络之卷积篇:详解残差网络为什么有用?(Why ResNets work?)

    详解残差网络为什么有用? 为什么ResNets能有如此好的表现,来看个例子,它解释了其中的原因,至少可以说明,如何构建更深层次的ResNets网络的同时还不降低它们在训练集上的效率.通常来讲,网络在训 ...

  2. KubeSphere 3.1.1 发布,可以接入集群已有的 Prometheus

    KubeSphere 作为一款面向应用的开源容器平台,经过 3 年的发展和 10 个版本的迭代,收获了两百多位开源贡献者,超过十万次下载,并有数千名社区用户用 KubeSphere 作为企业容器平台. ...

  3. CNI 基准测试:Cilium 网络性能分析

    原文链接:https://cilium.io/blog/2021/05/11/cni-benchmark 作者:Thomas Graf 译者:罗煜.张亮,均来自KubeSphere 团队 Thomas ...

  4. Java序列化之ProtoStuff

    知识点: ProtoStuff 是将结构数据转为字节流进行序列化的,优点是占用空间小,速度快,缺点是可读性差. ProtoStuff 是基于 ProtoBuf 发展而来的. 本文不讲那么多背景,直接上 ...

  5. Machine Learning Week_1 Introduction 1-4

    目录 1 Introduction 1.1 Video: Welcome unfamiliar words symbols 1.2 Video: What is machine learning? u ...

  6. NCNN 模型推理详解及实战

    一,依赖库知识速学 aarch64 OpenMP AVX512 submodule apt upgrade 二,硬件基础知识速学 2.1,内存 2.2,CPU 三,ncnn 推理模型 3.1,shuf ...

  7. IDEA 2024.2.2 最新安装教程(附激活-2099年~)

    访问 IDEA 官网 下载 IDEA 2024.2.2 版本的安装包. 下载补丁https://pan.quark.cn/s/fcc23ab8cadf 检查 进入 IDEA 中后,点击菜单 Help ...

  8. Redis数据结构:List类型全面解析

    文章目录 一.List数据类型 1.1 简介 1.2 应用场景 1.3 底层结构 二.数据结构 2.1 压缩列表ZipList 2.2 双向链表LinkedList(后续已废弃) 2.3 快速链表Qu ...

  9. pytest框架之fixture

    1.在进行接口关联时,一般很多个接口共用一个上行接口(例如)登录,可以使用fixture定义一个测试夹具,将登录的接口写在框架的conftest.py文件中: @pytest.fixture(scop ...

  10. Django3.0

    Django3.0 简介 Django 最初被设计用于具有快速开发需求的新闻类站点,目的是要实现简单快捷的网站开发.以下内容简要介绍了如何使用 Django 实现一个数据库驱动的 Web 应用. Dj ...