Ich habe zwei Vektoren von Deskriptoren von zwei Bildern abgeglichen:Wie zeichne ich Matches in Opencv?
cv::Ptr<BinaryDescriptorMatcher> bdm = BinaryDescriptorMatcher::createBinaryDescriptorMatcher();
std::vector<std::vector<cv::DMatch> > matches;
float maxDist = 10.0;
bdm->radiusMatch(descr2, descr1, matches, maxDist);
// descr1 from image1, descr2 from image2
std::vector<char> mask(matches.size(), 1);
Aber jetzt will ich von den beiden Bildern der gefundenen Übereinstimmungen ziehen.
funktioniert das nicht:
drawMatches(gmlimg, keylines, walls, keylines1, matches, outImg, cv::Scalar::all(-1), cv::Scalar::all(-1), mask, DrawLinesMatchesFlags::DEFAULT);
Und dies weder:
drawLineMatches(gmlimg, keylines, walls, keylines1, matches, outImg, cv::Scalar::all(-1), cv::Scalar::all(-1), mask, DrawLinesMatchesFlags::DEFAULT);
Woher wissen Sie, dass sie nicht funktionieren? Für welches Bild erwarten Sie die Spiele? Für mich sollten Sie versuchen, 'cv :: Scalar :: all (255, 255, 255)' zu machen, und Sie sollten weiße Linien bekommen. Außerdem erhalten Sie Treffer von Bild 2 zu 1, aber umgekehrt. (Aber ich weiß nicht, ob 'gmlimg' Bild 1 oder 2 ist) –
drawLineMatches funktioniert nicht, weil Übereinstimmungen ein std sein müssen: : vector, aber meine ist std :: vector >, weil radiusMatch es so braucht. Und drawMatches benötigt kepoints und nicht keylines. http://docs.opencv.org/3.0-beta/modules/line_descriptor/doc/drawing_functions.html http://docs.opencv.org/2.4.8/modules/features2d/doc/drawing_function_of_keypoints_and_matches .html –
Philipp
Ist das nicht der gleiche Grund, warum 'drawMatches' nicht funktioniert? –