使用FlannBasedMatcher
在 OpenCV 中,我得到不同的结果调用具有相同参数的匹配器。谁能建议我做错了什么?
下面的代码显示了我遇到的问题的一个最小示例 - 它是我如何使用的简化代表FlannBasedMatcher
- 这不是真正的代码:)
每次循环输出的结果应该是相同的,但它们不是。
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);
}
}
输出,虽然我认为它不会有帮助(?),是
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