OpenCV DescriptorMatcher radiusMatch und knnMatch Ergebnis-format
Weiß jemand zufällig, warum die OpenCV-2 DescriptorMatcher::radiusMatch()
und knnMatch()
nehmen vector<vector<DMatch>>& matches
? Ich bin ein wenig verwirrt darüber, warum Sie würde nicht nur einen Vektor, da es nur ein einzelnes array von Punkten in der Szene entsprechen, die für die Ausbildung Bild, richtig?
Ich habe so etwas wie dieses:
void getMatchingPoints(
const vector<vector<cv::DMatch> >& matches,
const vector<cv::KeyPoint>& keyPtsTemplates,
const vector<cv::KeyPoint>& keyPtsScene,
vector<Vec2f>& ptsTemplate,
vector<Vec2f>& ptsScene
)
{
ptsTemplate.clear();
ptsScene.clear();
for (size_t k = 0; k < matches.size(); k++)
{
for (size_t i = 0; i < matches[k].size(); i++)
{
const cv::DMatch& match = matches[k][i];
ptsScene.push_back(fromOcv(keyPtsScene[match.queryIdx].pt));
ptsTemplate.push_back(fromOcv(keyPtsTemplates[match.trainIdx].pt));
}
}
}
aber ich bin ein wenig verwirrt darüber, wie man eigentlich die Karte ca. Lage das Objekt einmal habe ich Sie alle in ptsScene
. Die Punkte scheinen zerstreut zu mir, wenn ich nur zeichnen, also ich glaube, ich bin fehlt, was die verschachtelte Vektoren stellen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
knnMatch
Funktion zurückk
nächste-Nachbar entspricht, d.h. wenn Sie anrufenknnMatch(queryDescriptors, trainDescriptors, matchesQueryToTrain, 3)
wo in diesem Fallk=3
ist, dann ist für jedes training zeigen, es finden die 3 besten matches aus der Abfrage gesetzt.In Bezug auf Ihre
vector<vector<DMatch>>
dies bedeutet, dass die äußerenvector
ist ein Vektor, der die einzelnen query->Zug entsprechen, und das innerevector
ist ein Vektor, der Ihrk
nächsten Spiele.Es ist ein ziemlich gutes Beispiel, wie man diese
k
Spiele zusammen mit einem cross-checking-Methode in diese andere Frage.Wenn Sie möchten, eine einfache 1-1 matching, dann können Sie anrufen knnMatch mit k=1 wird wieder ein innerer Vektor der Größe 1 an, oder rufen Sie
match
welche Ausgänge entspricht in formvector<DMatch>
mit keinen zweiten Vektor.