當我試圖用drawMatchesKnn功能在本tutorial爲FLANN特徵匹配提到的,我得到以下錯誤的OpenCV的Python:無drawMatchesknn功能
AttributeError: 'module' object has no attribute 'drawMatchesKnn'
我與其他資源檢查了drawMatchesKnn方法存在於OpenCV的。
爲什麼我會收到此錯誤?
在此先感謝
當我試圖用drawMatchesKnn功能在本tutorial爲FLANN特徵匹配提到的,我得到以下錯誤的OpenCV的Python:無drawMatchesknn功能
AttributeError: 'module' object has no attribute 'drawMatchesKnn'
我與其他資源檢查了drawMatchesKnn方法存在於OpenCV的。
爲什麼我會收到此錯誤?
在此先感謝
您需要使用OpenCV的版本3 drawMatchesKnn()
存在於3.0.0-alpha但不是在2.4.11
該錯誤是存在的,因爲你使用的是舊版本的OpenCV。
函數cv2.drawMatches
和cv2.drawMatchesKnn
在較新版本的OpenCV 2.4中不可用。 @rayryeng提供了一個lightweight alternative,它的輸出爲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)
只是想說謝謝你,我已經添加到我的原始文章,使其完成,我已經在我的答案鏈接你。 – rayryeng
OpenCV的版本:2.4.7 – rohangulati
使用OpenCV的版本3.x在源代碼分支中構建 –
'IMP - 本教程適用於OpenCV 3x版本。不是OpenCV 2x',它在README頁面上明確表示。你沒看過嗎? –