outimage - OpenCV Python: sin función drawMatchesknn
drawkeypoints opencv python (2)
Cuando traté de usar la función drawMatchesKnn como se menciona en este tutorial para la coincidencia de funciones de FLANN, recibo el siguiente error
AttributeError: el objeto ''module'' no tiene atributo ''drawMatchesKnn''
Comprobé con otros recursos que el método drawMatchesKnn está presente en opencv.
¿Por qué recibo este error?
Gracias por adelantado
Necesita utilizar OpenCV versión 3. drawMatchesKnn()
está presente en 3.0.0-alfa pero no en 2.4.11
Ese error está ahí, porque estás usando una versión anterior de OpenCV.
Las funciones cv2.drawMatches
y cv2.drawMatchesKnn
no están disponibles en las versiones más nuevas de OpenCV 2.4. @rayryeng proporcionó una alternativa ligera que funciona igual que para la salida de DescriptorMatcher.match
. La diferencia con DescriptorMatcher.knnMatch
es que las coincidencias se devuelven como una lista de listas. Para usar la alternativa @rayryeng, las coincidencias se deben extraer en una lista en 1-D.
Por ejemplo, el tutorial Brute-Force Matching con SIFT Descriptors y Ratio Test podría modificarse como tal:
# 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)