8

当我尝试使用本教程中提到的 drawMatchesKnn 函数进行 FLANN 特征匹配时,出现以下错误

AttributeError:“模块”对象没有属性“drawMatchesKnn”

我检查了 opencv 中存在 drawMatchesKnn 方法的其他资源。

为什么我会收到此错误?

提前致谢

4

3 回答 3

5

新版本的 OpenCV 2.4 中不提供cv2.drawMatches这些功能。cv2.drawMatchesKnn@rayryeng 提供了一个轻量级的替代方案,它适用于DescriptorMatcher.match. 不同之DescriptorMatcher.knnMatch处在于匹配项以列表列表的形式返回。要使用@rayryeng 替代方案,必须将匹配项提取到一维列表中。

例如,可以将Brute-Force Matching with SIFT Descriptors and Ratio Test教程修改为:

# BFMatcher with default params
bf = cv2.BFMatcher()
matches = bf.knnMatch(des1,des2, k=2)

# Apply ratio test
good = []
for m,n in matches:
    if m.distance < 0.75*n.distance:
       # Removed the brackets around m 
       good.append(m)

# Invoke @rayryeng's drawMatches alternative, note it requires grayscale images
gray1 = cv2.cvtColor(img1,cv2.COLOR_BGR2GRAY)
gray2 = cv2.cvtColor(img2,cv2.COLOR_BGR2GRAY)
drawMatches(gray1,kp1,gray2,kp2,good)
于 2016-02-24T23:03:14.060 回答
0

您需要使用 OpenCV 版本 3。drawMatchesKnn()存在于3.0.0-alpha但不存在于2.4.11

存在该错误,因为您使用的是旧版本的 OpenCV。

于 2015-04-19T16:02:33.010 回答
-2

而不是good.append(m)尝试good.append([m])

于 2021-03-30T01:27:17.723 回答