2017-07-20 3 views
0

Ich benutze OpenCV 3.3. Ich möchte die OpenCV C++ - Match-Funktion für ein Objekt vom Typ Vector Dmatch verwenden. Das Ziel besteht darin, Deskriptoren aus einem einzelnen Abfragebild mit den Deskriptoren einer Liste mehrerer Bilder abzugleichen. Ich weiß, dass, wenn diese Funktion verwendet wird, um Deskriptoren von einem einzelnen Bild zu Deskriptoren von einem anderen einzelnen Bild zu vergleichen, die zwei Schlüsselpunktindizes, die jedem übereinstimmenden Deskriptor für jedes Bild entsprechen, in jedem Dmatch-Objekt aus dem Vektor gespeichert werden.Speichern von Schlüsselindizes durch Vergleichen eines einzelnen Abfragebildes mit einer Liste mehrerer Bilder

Zum Beispiel, wenn ich

Mat img_1=imread("path1..."); 
Mat img_2=imread("path2..."); 

vector<KeyPoint> keypoints_1, keypoints_2; 
Mat descriptors_1, descriptors_2; 

detector->detectAndCompute(img_1, Mat(), keypoints_1, descriptors_1); 
detector->detectAndCompute(img_2, Mat(), keypoints_2, descriptors_2); 

FlannBasedMatcher matcher; 
vector<DMatch> matches; 
matcher.match(descriptors_1, descriptors_2, matches); 

dann, wenn ich die keypoints zugreifen möchten, die für jeden wurden angepasst, i das ist ein int, die schlechter ist(), um matches.size, dann

Was passiert jedoch, wenn ich versuche, Deskriptoren aus einem einzelnen Abfragebild mit den Deskriptoren aus einer Liste von mehreren Bildern zu vergleichen, da jedes Dmatch-Objekt nur zwei Indizes enthalten kann, während ich mehr als zwei Bilder zuordnen möchte. heißt:

vector<Mat> descriptors1; 
Mat descriptors2; 

matcher.add(descriptors1); 
matcher.train(); 

matcher.match(descriptors2, matches); 

was bedeuten die Indizes?

int idx=matches[i].trainIdx; 
int idy=matches[i].queryIdx; 

Antwort

0

Sie können die übereinstimmenden Indexwerte für alle Zugbilder in einer Liste speichern, während Sie die Bilder durchlaufen. Sie können dann die passenden Punkte auswählen und mit ihnen spielen, wie Sie wollen.

Verwandte Themen