在OpenCV中,通过提供功能名称来创建cv::FeatureDetector
非常常见:
cv::Ptr<cv::FeatureDetector> detector = cv::FeatureDetector::create("SURF");
这是一个工厂模式,是cv::FeatureDetector
一个抽象类。
然后,给定cv::Ptr<cv::FeatureDetector>
类型的变量,是否可以检索要素的名称?在我的例子中是"SURF"
。
答案 0 :(得分:7)
从cv::Algorithm
派生的类继承了name()
方法,该方法返回包含算法名称的字符串。对于SURF检测器,name()
返回字符串
Feature2D.SURF
这是一种人类可读的形式。通常,此字符串的格式为 algorithm-type 。 instance-name ,但只有少数只有单字描述。对于任何特征检测算法,算法类型前缀始终为Feature2D
。如果您需要精确的字符串匹配,可以自己解析。
auto surf = cv::FeatureDetector::create("SURF");
auto n = surf->name();
std::cout << n << std::endl; // Prints "Feature2D.SURF", sans quotes