OpenCV检测和计算图像特征

OpenCV detect and compute image features

最近从 3.4.5 升级了 OpenCV。到 OpenCV 4.2.0。

在我遵循这个拼接示例之前:https://github.com/opencv/opencv/blob/5131619a1a4d1d3a860b5da431742cc6be945332/samples/cpp/stitching_detailed.cpp (particularly line 480). After upgrading, I altered the code to align more with this newer example: https://github.com/opencv/opencv/blob/master/samples/cpp/stitching_detailed.cpp(注意第 481 行)。

这个新的 computeImageFeatures 功能有问题,我检测到的功能较少。具有相同图像的旧代码给了我 1400 多个特征,但 computeImageFeatures 给了我每张图像恰好 500 个特征。任何想法如何 "fix" 这个?我相信它也会导致 "Bundle Adjuster" 稍后失败。

根据 cv::ORB::create 的文档,nfeatures 参数的默认值为 500

第一个参数是nfeatures,您可以将第一个参数设置为2000等更小的数字。

构造函数参数如下:

static Ptr<ORB> cv::ORB::create (int     nfeatures = 500,
                                 float   scaleFactor = 1.2f,
                                 int     nlevels = 8,
                                 int     edgeThreshold = 31,
                                 int     firstLevel = 0,
                                 int     WTA_K = 2,
                                 int     scoreType = ORB::HARRIS_SCORE,
                                 int     patchSize = 31,
                                 int     fastThreshold = 20 
                                )       

尝试修改:

if (features_type == "orb")
{
    finder = ORB::create();
}

if (features_type == "orb")
{
    finder = ORB::create(2000);
}

如果您使用的不是 ORB,而是其他类型的功能,请阅读构造函数的文档。
我假设所有类型都有一个限制器参数。