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