当我尝试使用本教程中提到的 drawMatchesKnn 函数进行 FLANN 特征匹配时,出现以下错误
AttributeError:“模块”对象没有属性“drawMatchesKnn”
我检查了 opencv 中存在 drawMatchesKnn 方法的其他资源。
为什么我会收到此错误?
提前致谢
当我尝试使用本教程中提到的 drawMatchesKnn 函数进行 FLANN 特征匹配时,出现以下错误
AttributeError:“模块”对象没有属性“drawMatchesKnn”
我检查了 opencv 中存在 drawMatchesKnn 方法的其他资源。
为什么我会收到此错误?
提前致谢
新版本的 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)
您需要使用 OpenCV 版本 3。drawMatchesKnn()
存在于3.0.0-alpha但不存在于2.4.11
存在该错误,因为您使用的是旧版本的 OpenCV。
而不是good.append(m)
尝试good.append([m])