OpenCV,功能与教程中的代码相匹配

我从OpenCV教程页面复制了功能匹配与FLANN的代码,并做了以下更改:

  • 我使用了SIFT功能,而不是SURF;
  • 我修改了“良好匹配”的支票。 代替

    if( matches[i].distance < 2*min_dist )
    
  • 我用了

        if( matches[i].distance <= 2*min_dist )
    

    否则,当比较图像与自身时,我会得到零匹配的好匹配。

  • 绘制关键点时修改参数:

    drawMatches( img1, k1, img2, k2,
                     good_matches, img_matches, Scalar::all(-1), Scalar::all(-1),
                     vector<char>(), DrawMatchesFlags::DEFAULT);
    
  • 我从INRIA-Holidays数据集的爱尔兰文件夹中的所有图像中提取SIFT。 然后,我将每幅图像与其他图像进行比较并绘制匹配。

    然而,我从来没有遇到过一个奇怪的问题,那就是我以前使用过的其他SIFT / Matcher实现:

  • 我匹配自己的图像匹配是好的。 除了一些关键点之外,每个关键点都被映射到它自己。 见上面的图片。 图像与自身相匹配
  • 当我与另一个图像J(J不等于I)匹配时,许多点将映射到同一个图像上。 一些例子如下。 火柴火柴火柴
  • 有没有人使用OpenCV教程中的相同代码,并可以报告我的不同体验?


    检出matcher_simple.cpp示例。 它使用了一个似乎工作得很好的强力匹配器。 代码如下:

    // detecting keypoints
    SurfFeatureDetector detector(400);
    vector<KeyPoint> keypoints1, keypoints2;
    detector.detect(img1, keypoints1);
    detector.detect(img2, keypoints2);
    
    // computing descriptors
    SurfDescriptorExtractor extractor;
    Mat descriptors1, descriptors2;
    extractor.compute(img1, keypoints1, descriptors1);
    extractor.compute(img2, keypoints2, descriptors2);
    
    // matching descriptors
    BFMatcher matcher(NORM_L2);
    vector<DMatch> matches;
    matcher.match(descriptors1, descriptors2, matches);
    
    // drawing the results
    namedWindow("matches", 1);
    Mat img_matches;
    drawMatches(img1, keypoints1, img2, keypoints2, matches, img_matches);
    imshow("matches", img_matches);
    waitKey(0);
    
    链接地址: http://www.djcxy.com/p/89737.html

    上一篇: OpenCV, feature matching with code from the tutorial

    下一篇: How to use the OpenCV C++ specific sample on the Android platform?