BFMatcher match dans OpenCV jeter erreur

Je suis de SURF à l'aide de descripteurs pour l'image matching. J'ai l'intention de faire correspondre une image à une base de données d'images.

import cv2
import numpy as np
surf = cv2.xfeatures2d.SURF_create(400)

img1 = cv2.imread('box.png',0)
img2 = cv2.imread('box_in_scene.png',0)

kp1,des1 = surf.detectAndCompute(img1,None)
kp2,des2 = surf.detectAndCompute(img2,None)


bf = cv2.BFMatcher(cv2.NORM_L1,crossCheck=True)
#I am planning to add more descriptors
bf.add(des1)

bf.train()

#This is my test descriptor
bf.match(des2)

Le problème est avec bf.match est que j'obtiens l'erreur suivante:

OpenCV Error: Assertion failed (type == src2.type() && src1.cols == src2.cols && (type == CV_32F || type == CV_8U)) in batchDistance, file /build/opencv/src/opencv-3.1.0/modules/core/src/stat.cpp, line 3749
Traceback (most recent call last):
  File "image_match4.py", line 16, in <module>
    bf.match(des2)
cv2.error: /build/opencv/src/opencv-3.1.0/modules/core/src/stat.cpp:3749: error: (-215) type == src2.type() && src1.cols == src2.cols && (type == CV_32F || type == CV_8U) in function batchDistance

L'erreur est semblable à cette post. L'explication donnée est incomplète et insuffisante.Je veux savoir comment résoudre ce problème. J'ai utilisé l'ORBE des descripteurs de bien avec BFMatcher avoir NORM_HAMMING distance. L'erreur réapparaît.
Toute aide sera appréciée.

Les deux images que j'ai utilisé pour ce sont les suivants:

BFMatcher match dans OpenCV jeter erreur

boîte.png

BFMatcher match dans OpenCV jeter erreur

box_in_scene.png

Je suis à l'aide de Python 3.5.2 et OpenCV 3.1.x sous linux.

Donc .detectAndCompute apparaît à partir de OpenCV 3x et jusqu'? Je suis en utilisant 2.4 et il dit module object not found...
Cela dépend de la version d'opencv . Suivre des 2,4 ou 3.x.

OriginalL'auteur motiur | 2016-10-09