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:
boîte.png
box_in_scene.png
Je suis à l'aide de Python 3.5.2 et OpenCV 3.1.x sous linux.
Donc
Cela dépend de la version d'opencv . Suivre des 2,4 ou 3.x.
.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
Vous devez vous connecter pour publier un commentaire.
De recherche entre les descripteurs de deux images utilisation:
De rechercher parmi plusieurs images
La
add
méthode est utilisée pour ajouter un descripteur de multiples images de test. Une fois, tous les descripteurs sont indexés, vous exécuteztrain
méthode pour construire une Structure de Données sous-jacente(par exemple: KdTree qui sera utilisé pour la recherche en cas de FlannBasedMatcher). Vous pouvez ensuite exécutermatch
à trouver si l'épreuve de l'image est un plus correspondre à la requête de l'image. Vous pouvez le vérifier K-d_tree et de voir comment il peut être utilisé pour la recherche multidimensionnelle des vecteurs(Surf donne 64 dimensions vecteur).Remarque:- BruteForceMatcher, comme le nom l'indique, n'a pas de recherche interne de l'optimisation de la structure de données et a donc des train vide de méthode.
Exemple de Code pour l'Image Multiple de recherche
Pour DMatch sortie de bf.match, voir docs.
Voir l'exemple complet pour ce ici: Opencv3.0 docs.
D'Autres Info
Système d'exploitation: Mac.
Python: 2.7.10.
Opencv: 3.0.0-dev [Si souviens bien, installé à l'aide d'infusion].
Désolé, j'ai manqué. Donnez-moi quelque temps pour voir le problème.
Je pense que je me suis poser cette même question: stackoverflow.com/questions/37731908/...
Salut, je suis confronté à la même erreur. Tout semble aller bien. Par la voie, BruteForceMatcher n'est pas vraiment passe, car il n'a pas de formation. docs.opencv.org/2.4/modules/features2d/doc/...
J'ai aussi essayé FlannMatcher(depuis mon projet FlannMatcher/C++), mais face à ce opencv bug: github.com/opencv/opencv/issues/5667
OriginalL'auteur saurabheights
J'ai trouvé j'avais la même erreur. A pris un certain temps à comprendre - certaines de mes images étaient un peu sans relief, donc pas de keypoints ont été trouvés, et
detectAndCompute
retournéNone
pour les descripteurs. Peut-être la peine de vérifier la liste de descripteurs pourNone
éléments avant de passer àBFMatcher.add()
.OriginalL'auteur eldorz
J'avais la même erreur. Mais dans mon cas, c'était parce que j'étais à l'aide de TAMISER avec
cv2.NORM_HAMMING
métrique danscv2.BFMatcher_create
. La modification de la métrique à l'cv2.NORM_L1
résolu le problème.Citant les docs pour BFMatcher:
OriginalL'auteur Georgy
Edit: les Versions utilisées Python 3.6, OpenCV 3.4.1
J'ai eu beaucoup de mal lors de la préparation d'un programme qui utilise TAMISER ou ORBE en fonction du choix de l'utilisateur. Enfin, j'ai pu trouver les bons paramètres pour BFMatcher pour TAMISER et ORBE
La création de matcher objet
Lors de la capture et de traitement d'images
OriginalL'auteur Ali Eren Çelik