ich im Grunde viele keypoints mit SURF von ähnlichen Bildern und Hinzufügen von ihnen zu dem BFMatcher(NORM_L2)
knnMatch mit k = 2 ergibt 0 Nächster-Nachbar sogar mit Bildern trainiert
In Runtime am extrahieren kann es passieren, dass ich neue keypoints hinzufügen meine Jetzt Matcher mit matcher->add(myNewDescriptors);
wenn ich ein Bild mit nur 1 keypoint/Deskriptor hinzugefügt und ich verwende knnMatch es gibt keine Treffer:
matcher->knnMatch(queryDesc,matches,2);
Nach einer Weile bekomme ich einen Vektor mit 0 Nächster-Nachbar:
for(auto i = 0; i <matches.size(); i++) {
cout << "matches size: "<<matches[i].size()<<endl;
//> PRINTS: "matches size: 0"
Das passiert nur, wenn ich ein Bild mit nur 1 keypoint/descriptor eingefügt habe. Bevor das KnnMatch funktioniert.
Ich habe versucht zu überprüfen, ob matcher.getTrainDescriptors();
enthält meine Deskriptoren und effektiv enthält es alles. Um dies zu überprüfen, wenn ich folgendes mache:
cout << matcher->getTrainDescriptors().at(0).size(); // (Get the size of the descriptors Mat associated to the first training image)
Ich bekomme: [128 x 32]. Dies bedeutet, dass Deskriptoren vorhanden sind, aber die knnMatches geben einen leeren Vektor zurück
Beachten Sie auch, dass, wenn ich .knnMatch mit einem einfachen .match ändern, der Matcher alle DMatches normal zurückgibt! Der Code nicht nur mit knnMatch
- OpenCV: 2.4.5
- Training image:
- Query Image (das gleiche Bild mit einem Faktor von 0,4 skaliert)
Haben Sie Beispiel train.png und query.img (ich weiß, es ist wahrscheinlich egal)? Ich konnte das 0-Ergebnis-Verhalten nicht reproduzieren. – cxyzs7
hast du meinen Code kopiert? – dynamic
@ cxyzs7: Ich habe einen Link in der Frage zu meinen Bildern hinzugefügt – dynamic