使用OpenCV中的
下面的代码展示了我遇到的问题的最小化示例 - 它是我使用
循环每次输出的结果应该是相同的,但它们并不相同。
输出结果是,尽管我不认为它会有帮助(?):
FlannBasedMatcher
,我用相同的参数调用匹配器时得到了不同的结果。请问有人能建议我做错了什么吗?下面的代码展示了我遇到的问题的最小化示例 - 它是我使用
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