Python openCV特征匹配中最小距离向量的快速获取方法

Python openCV特征匹配中最小距离向量的快速获取方法,python,opencv,feature-extraction,feature-detection,Python,Opencv,Feature Extraction,Feature Detection,我正在使用python版本的openCV为两幅图像建立一个“相似性分数”。 首先,我找到每个图像的关键点及其描述符(例如,使用ORB或AKAZE)。 然后,我将这些关键点与图像进行匹配,并将这些匹配保存在一个列表中。 对于matches中的每个匹配x,我可以通过x.distance获得相应关键点之间的距离 我的相似性分数现在应该是匹配算法中找到的k最小距离的总和。显然,我可以得到这个分数(假设kknnMatch。在教程中,他们通常选择k=2,但也可能使用任意k。看看@Mika:谢谢你的回答。也许

我正在使用python版本的openCV为两幅图像建立一个“相似性分数”。 首先,我找到每个图像的关键点及其描述符(例如,使用ORB或AKAZE)。 然后,我将这些关键点与图像进行匹配,并将这些匹配保存在一个列表中。 对于
matches
中的每个匹配
x
,我可以通过
x.distance
获得相应关键点之间的距离

我的相似性分数现在应该是匹配算法中找到的
k
最小距离的总和。显然,我可以得到这个分数(假设
k
):

然而,这个循环非常慢。是否有一个向量化版本的
.distance
,我可以使用它将
匹配项直接转换为浮点列表

显然,还有其他方法可以做到这一点。但是它们都很慢(比如,它们意味着我以某种方式在比赛中循环)


谢谢大家!

对k个最小距离求和的想法是什么?搜索k-最近邻搜索,你在这里“我会直接得到你需要的。OpenCV的描述符提供matcher->knnMatch。在教程中,他们通常选择k=2,但也可能使用任意k。看看@Mika:谢谢你的回答。也许我需要澄清一下。给定图1和图2,我的目标是对这些图像的相似性进行评分。如果匹配特征之间的最小k距离很小,这些图像将非常相似。与此相反,knnMatch会给出图2中与图1中给定关键点最相似的k个关键点。好的,您只想分析k个不同的关键点,而不是每个关键点的k个最佳匹配。你确定循环很慢吗?你的k有多大?你一共有几场比赛?使用快速排序进行排序应该很快。循环不应该那么慢。
matches = sorted(matches, key=lambda x: x.distance)
score = 0
for l in range(k):
    score += matches[l].distance