2013-11-24 4 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. Not OpenCV 2x', он четко говорит на странице README. Вы этого не читали? –

ответ

0

Вы должны использовать OpenCV версии 3. drawMatchesKnn() присутствует в 3.0.0-alpha, но не в 2.4.11

Эта ошибка есть, потому что вы используете старую версию OpenCV.

3

Функции cv2.drawMatches и cv2.drawMatchesKnn недоступны в новых версиях OpenCV 2.4. @rayryeng предоставил lightweight alternative, который работает как для вывода DescriptorMatcher.match. Разница с DescriptorMatcher.knnMatch заключается в том, что совпадения возвращаются в виде списка списков. Чтобы использовать альтернативу @rayryeng, матчи должны быть извлечены в 1-D список.

Например, 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

 Смежные вопросы

  • Нет связанных вопросов^_^