我正在使用openCV FastFeatureDetector从图像中提取快速关键点。
但快速特征检测器检测的编号不是常量数字。
我想设置快速特征检测器获取的最大关键点数。
我可以指定使用openCV FastFeatureDetector
时获得的FAST关键点数吗?如何?
我最近遇到了这个问题,经过简短的搜索,我发现了DynamicAdaptedFeatureDetector,它可以迭代检测关键点,直到找到所需的数字。
检查:http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_feature_detectors.html#dynamicadaptedfeaturedetector
法典:
int maxKeypoints, minKeypoints;
Ptr<FastAdjuster> adjust = new FastAdjuster();
Ptr<FeatureDetector> detector = new DynamicAdaptedFeatureDetector(adjust,minKeypoints,maxKeypoints,100);
vector<KeyPoint> keypoints;
detector->detect(image, keypoints);
我提供了代码的主要部分,在这种情况下,您可以根据需要设置关键点的数量。祝你好运。
# define MAX_FEATURE 500 // specify maximum expected feature size
string detectorType = "FAST";
string descriptorType = "SIFT";
detector = FeatureDetector::create(detectorType);
extractor = DescriptorExtractor::create(descriptorType);
Mat descriptors;
vector<KeyPoint> keypoints;
detector->detect(img, keypoints);
if( keypoints.size() > MAX_FEATURE )
{
cout << " [INFO] key-point 1 size: " << keypoints.size() << endl;
KeyPointsFilter::retainBest(keypoints, MAX_FEATURE);
}
cout << " [INFO] key-point 2 size: " << keypoints.size() << endl;
extractor->compute(img, keypoints, descriptors);
另一种解决方案是以低阈值检测尽可能多的关键点,并应用本文所述的自适应非极大抑制(ANMS)。您可以指定所需的点数。此外,您可以免费获得均匀分布在图像上的点。代码可以在这里找到。