C++ OpenCV FlannBasedMatcher在用于一对图像匹配和成对图像匹配时给出不同的结果

C++ OpenCV FlannBasedMatcher在用于一对图像匹配和成对图像匹配时给出不同的结果,c++,opencv,surf,flannbasedmatcher,C++,Opencv,Surf,Flannbasedmatcher,我想在一些场景图像上找到一个模板图像。因此,我尝试在场景图像和模板图像之间找到单应性。我正在使用OpenCV和c++。首先使用SURF查找图像和模板的描述符。然后使用FlannBasedMatcher获取匹配点。 一切似乎都很好,但当我单独为每个图像运行该程序时,结果与我为所有场景图像运行该程序时不同 Ptr<FlannBasedMatcher> matcher = FlannBasedMatcher::create(); vector<DMatch> matches;

我想在一些场景图像上找到一个模板图像。因此,我尝试在场景图像和模板图像之间找到
单应性。我正在使用
OpenCV
c++
。首先使用
SURF
查找图像和模板的描述符。然后使用
FlannBasedMatcher
获取匹配点。 一切似乎都很好,但当我单独为每个图像运行该程序时,结果与我为所有场景图像运行该程序时不同

Ptr<FlannBasedMatcher> matcher = FlannBasedMatcher::create();
vector<DMatch> matches;
matcher->match(objectDescriptor, sceneDescriptor, matches);
double max_dist = 0, min_dist = DBL_MAX;

for (int i = 0; i < objectDescriptor.rows; i++)
{
    double dist = matches[i].distance;
    if (dist < min_dist) min_dist = dist;
    if (dist > max_dist) max_dist = dist;
}

vector< DMatch > goodMatches;
for (int i = 0; i < objectDescriptor.rows; i++)
{
    if (matches[i].distance < max((coeffGoodMatches * min_dist), maxDistanceMatches))
    {
        goodMatches.push_back(matches[i]);
    }
}

vector<Point2f> obj;
vector<Point2f> scene;
for (int i = 0; i < goodMatches.size(); i++)
{
    //-- Get the keypoints from the good matches
    obj.push_back(keypoints_object[goodMatches[i].queryIdx].pt);
    scene.push_back(keypoints_scene[goodMatches[i].trainIdx].pt);
}
Mat H = findHomography(obj, scene, CV_RANSAC);

Mat result;
warpPerspective(img_scene, result, H, img_object.size(), WARP_INVERSE_MAP);

有什么想法吗?

嗨,我也有同样的问题。你解决了吗?嗨,我也有同样的问题。你解决了吗?
matcher->clear();