BFMatcher knnMatch
J'essaie de mettre en œuvre knnMatch sur BFMatcher comme suit:
BFMatcher matcher(NORM_L2, true);
vector<DMatch> matches;
//matcher.match(descriptors1, descriptors2, matches);
matcher.knnMatch(descriptors1, descriptors2, matches, 2);
Et recevez l'erreur suivante:
fiducialMain.cpp: In function ‘void fiducialCalc(cv::Mat, cv::Mat, cv::Mat&, cv::Mat&, int&)’:
fiducialMain.cpp:98:56: error: no matching function for call to ‘cv::BFMatcher::knnMatch(cv::Mat&, cv::Mat&, std::vector<cv::DMatch>&, int)’
matcher.knnMatch(descriptors1, descriptors2, matches,2);
^
fiducialMain.cpp:98:56: note: candidates are:
In file included from fiducialMain.cpp:15:0:
/usr/local/include/opencv2/features2d/features2d.hpp:1116:18: note: void cv::DescriptorMatcher::knnMatch(const cv::Mat&, const cv::Mat&, std::vector<std::vector<cv::DMatch> >&, int, const cv::Mat&, bool) const
CV_WRAP void knnMatch( const Mat& queryDescriptors, const Mat& trainDescriptors,
^
/usr/local/include/opencv2/features2d/features2d.hpp:1116:18: note: no known conversion for argument 3 from ‘std::vector<cv::DMatch>’ to ‘std::vector<std::vector<cv::DMatch> >&’
/usr/local/include/opencv2/features2d/features2d.hpp:1130:18: note: void cv::DescriptorMatcher::knnMatch(const cv::Mat&, std::vector<std::vector<cv::DMatch> >&, int, const std::vector<cv::Mat>&, bool)
CV_WRAP void knnMatch( const Mat& queryDescriptors, CV_OUT vector<vector<DMatch> >& matches, int k,
^
/usr/local/include/opencv2/features2d/features2d.hpp:1130:18: note: no known conversion for argument 2 from ‘cv::Mat’ to ‘std::vector<std::vector<cv::DMatch> >&’
Quelqu'un peut-il expliquer cette erreur?
OriginalL'auteur P3d0r | 2015-02-25
Vous devez vous connecter pour publier un commentaire.
s'il vous plaît avoir un autre regard sur les docs
tandis que l'ordinaire match de la fonction de la
vector<DMatch>
comme résultat,knnMatch (dire à haute voix : k-plus proche voisins !) les résultats obtenus dans plusieurs(k) des vecteurs, donc vous avez besoin d'un :
vector< vector< DMatch > > correspond à
pour le résultat
hey, je pense, c'est un très commune piège ! (vous n'êtes pas le seul avec qui)
Malheureusement, la drawMatches fonction ne fonctionne pas avec vector< vector <DMatch> > depuis il appelle pour un seul vecteur par les docs (docs.opencv.org/modules/features2d/doc/...)
vrai, vous aurez à parcourir. (ou de ne prendre que le 1er.) si je vous pose la question: pourquoi avez-vous besoin d'un knnMatch (pas le match régulier) ?
Réponse courte - j'essayais de trouver les meilleures correspondances avec knnMatch parce que j'ai eu des bug de problèmes avec mon good_matches algorithme (stackoverflow.com/questions/28725273/...). Peut-être pas la meilleure approche, mais j'ai essayé
OriginalL'auteur berak
Vos arguments pour BFMatcher ne sont pas correctes. Lorsque vous définissez croise comme vrai, vous pouvez avoir un seul match par tazoult. Attendu que, pour knnMatch vous avez besoin d'avoir plus d'un match. Ainsi, votre code devrait ressembler à:
OriginalL'auteur Harsh Wardhan