OpenCV에서 FlannBasedMatcher
을 사용하면 동일한 매개 변수로 정규 표현식을 호출하는 결과가 달라집니다. 누구든지 내가 뭘 잘못하고 있다고 제안 할 수 있니?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
) (매칭을 찾기위한 OpenCV의 3.1) 할 때마다 다른 결과를 얻을 이유가 일치하는 임의의 함수를 사용한다는 것을 의미
는 이잖아. 이미지 스티칭 용. 3 개의 이미지를 사용하면 각 이미지 쌍에 대해 동일한 결과 집합을 제공합니다. 4 개의 이미지에 대해 동일한 코드를 실행하면 이전 종료 쌍에 대한 knn_matches가 변경되지만 각 재실행시에도 동일합니다. 이유를 설명해 주시겠습니까 –