我使用 opencv C++ 的 knnMatch 来匹配 2 个图像,称为 img1 和 img2。我以为img1和img2匹配的结果和img2和img1匹配的结果一定是一样的,但是我的代码显示它们是不同的
在我的测试中,img1 比 img2 大。
在结果中,两种情况的匹配数相同,但第一个程序中的好匹配数比第二个程序多(代码如下所示)。
请帮我解释得到的结果
*Program1. img1 to img2*
Ptr<DescriptorMatcher> matcher = DescriptorMatcher::create(DescriptorMatcher::BRUTEFORCE);
matcher->knnMatch(descriptors_img1, descriptors_img2, knn_matches, 2);
printf("matches: %i\n", knn_matches.size());
for (size_t i = 0; i < knn_matches.size(); i++)
{
if (knn_matches[i][0].distance < ratio_thresh * knn_matches[i][1].distance)
{
good_matches.push_back(knn_matches[i][0]);
}
}
printf("good_matches: %i\n", good_matches.size());
Program2. img2 to img1
Ptr<DescriptorMatcher> matcher = DescriptorMatcher::create(DescriptorMatcher::BRUTEFORCE);
matcher->knnMatch(descriptors_img2, descriptors_img1, knn_matches, 2);
printf("matches: %i\n", knn_matches.size());
for (size_t i = 0; i < knn_matches.size(); i++)
{
if (knn_matches[i][0].distance < ratio_thresh * knn_matches[i][1].distance)
{
good_matches.push_back(knn_matches[i][0]);
}
}
printf("good_matches: %i\n", good_matches.size());