gpt4 book ai didi

c++ - OpenCV - 在同一个程序中收集 featureDetectors 和 descriptorDetector

转载 作者:行者123 更新时间:2023-11-28 02:44:59 24 4
gpt4 key购买 nike

我想编写一个允许使用 SIFT、SURF、ORB(所有特征检测器)、差异描述符和差异匹配器的程序。

我想运行这样的东西:features("SIFT","SIFT","BruteForce") 分别是 features("Detector","descriptor","matcher")。

确实我以前做过一个程序,但是有很多“如果”。例如“如果(检测=”SIFT”)”“if (matcher=="BruteForce")”等。因此,如果我想将某个检测器与另一种描述符一起使用,我的程序就不灵活。

所以我发现了类似的东西:

 featureDetector = FeatureDetector::create( detectorType );
descriptorExtractor = DescriptorExtractor::create( descriptorType );
descriptorMatcher = DescriptorMatcher::create( matcherType );

它非常完美,因为我可以在一个函数中使用一个字符串来确定我想使用哪个检测器、描述符和匹配器。

但是,我无法更改参数(我发现了类似 featureDetector.set() 但没有文档的东西),因此结果非常糟糕......仅计算一张图片需要时间并且关键点不准确.

即使是 SIFT 也比 SURF 花费的时间更少!

然而,在我的第一个程序中,当我使用

detector=new SiftFeatureDetector(nfeatureSift,nOctaveLayerSift,contrastThresholdSift,edgeThresholdSift,sigmaSift);

结果更好! (因为我可能更改了参数)。

那么我该如何解决呢?也许,做我以前做过的事情是一个更好的解决方案,但它太重了,因为我必须做很多“如果”才能知道我想使用哪个检测器等...

你怎么看?

感谢

最佳答案

为了改变算法参数,使用set()方法,你已经找到了。每个特征检测器可用的参数没有记录,但在 OpenCV 的源代码中列举了它们,您可以找到 here , 或 the nonfree module用于 SURF 和 SIFT。

枚举参数与为特征检测器的构造函数列出的参数之间存在粗略的对应关系。

例子

给定 SIFT 的条目:

CV_INIT_ALGORITHM(SIFT, "Feature2D.SIFT",
obj.info()->addParam(obj, "nFeatures", obj.nfeatures);
obj.info()->addParam(obj, "nOctaveLayers", obj.nOctaveLayers);
obj.info()->addParam(obj, "contrastThreshold", obj.contrastThreshold);
obj.info()->addParam(obj, "edgeThreshold", obj.edgeThreshold);
obj.info()->addParam(obj, "sigma", obj.sigma))

引号中的名称(例如 "nFeatures")是您要提供给 set()name 参数的参数。

因此,要将检测到的特征数量限制为 500,您可以这样写:

featureDetector = FeatureDetector::create( detectorType );
featureDetector->set("nFeatures", 500);

这将创建一个与写入参数相同的检测器:

SIFT detector(500);

注意:如果使用 set() 设置算法参数,CV_INIT_ALGORITHM block 中列出但您没有设置的任何字段provide 将使用默认值。

关于c++ - OpenCV - 在同一个程序中收集 featureDetectors 和 descriptorDetector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24739818/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com