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,而是其他类型的功能,请阅读构造函数的文档。
我假设所有类型都有一个限制器参数。
最近从 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,而是其他类型的功能,请阅读构造函数的文档。
我假设所有类型都有一个限制器参数。