2013-11-24 30 views
6

當我試圖用drawMatchesKnn功能在本tutorial爲FLANN特徵匹配提到的,我得到以下錯誤的OpenCV的Python:無drawMatchesknn功能

AttributeError: 'module' object has no attribute 'drawMatchesKnn'

我與其他資源檢查了drawMatchesKnn方法存在於OpenCV的。

爲什麼我會收到此錯誤?

在此先感謝

+0

OpenCV的版本:2.4.7 – rohangulati

+1

使用OpenCV的版本3.x在源代碼分支中構建 –

+0

'IMP - 本教程適用於OpenCV 3x版本。不是OpenCV 2x',它在README頁面上明確表示。你沒看過嗎? –

回答

0

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

該錯誤是存在的,因爲你使用的是舊版本的OpenCV。

3

函數cv2.drawMatchescv2.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) 
+1

只是想說謝謝你,我已經添加到我的原始文章,使其完成,我已經在我的答案鏈接你。 – rayryeng