FlannBasedMatcher gibt unterschiedliche Ergebnisse zurück

Verwendung derFlannBasedMatcher In OpenCV erhalte ich unterschiedliche Ergebnisse, wenn ich den Matcher mit denselben Parametern aufrufe. Kann jemand vorschlagen, was ich bitte falsch mache?

Der folgende Code zeigt ein minimales Beispiel für das Problem, das ich habe - er ist vereinfacht dargestellt, wie ich das verwendeFlannBasedMatcher - das ist kein echter Code :)

Die Ergebnisse, die jedes Mal in der Schleife ausgegeben werden, sollten identisch sein, sind es aber nicht.

    int const k = std::min(query_descriptors.rows,
                      std::min(train_descriptors.rows, 2));

    cv::Mat query_descriptors_original = query_descriptors.clone();
    cv::Mat train_descriptors_original = train_descriptors.clone();
    for (int loop=0; loop<2; ++loop)
    {
        cv::FlannBasedMatcher matcher;
        matcher.add(std::vector<cv::Mat>(1, train_descriptors));

        std::vector<matches_t> knnMatches;
        matcher.knnMatch(query_descriptors,  knnMatches, k);

        matches.clear();
        for (auto const &knn : knnMatches)
        {
            matches.push_back(knn[0]);
            std::cout << knn[0].queryIdx << ',' << knn[0].trainIdx << '\n';
        }
        std::cout << '\n';

        assert(cv::countNonZero(query_descriptors != query_descriptors_original) == 0);
        assert(cv::countNonZero(train_descriptors != train_descriptors_original) == 0);
    }
}

Die Ausgabe ist, obwohl ich nicht denke, dass es helfen wird (?)

0,27
1,170
2,100
3,100
4,123
5,100
6,191
7,71
8,191
9,67
10,27
11,45
12,302
13,190
14,248
15,158
16,262
17,248
18,211
19,67
20,248
21,275

0,2
1,200
2,224
3,302
4,130
5,302
6,191
7,195
8,191
9,195
10,200
11,45
12,248
13,277
14,248
15,255
16,262
17,248
18,182
19,14
20,54
21,284

Antworten auf die Frage(1)

Ihre Antwort auf die Frage