在最新版本中,OpenCV允许使用create函数轻松创建关键点检测器,描述符或匹配器,例如
cv::Ptr<cv::FeatureDetector> featureDetector = cv::FeatureDetector::create("FAST")
此调用执行 NOT 支持参数。例如。 SURF,FAST等都有很多参数。
我现在该如何更改? 我已经找到了它的一部分,例如我可以通过
获取参数列表(字符串列表)std::vector<std::string> parameters;
featureDetector->getParams(parameters);
显然我需要以某种方式获取cv :: Algorithm *对象来调用set(char*, bool/int/float/... value)
,但我不知道如何。
答案 0 :(得分:5)
实际上事实证明,featureDetector
已经是Algorithm
对象,即您可以直接在其上设置参数,例如
featureDetector->set("someParam", someValue)
如果您想了解功能检测器的参数,可以使用此功能为您打印:
void ClassificationUtilities::printParams( cv::Algorithm* algorithm ) {
std::vector<std::string> parameters;
algorithm->getParams(parameters);
for (int i = 0; i < (int) parameters.size(); i++) {
std::string param = parameters[i];
int type = algorithm->paramType(param);
std::string helpText = algorithm->paramHelp(param);
std::string typeText;
switch (type) {
case cv::Param::BOOLEAN:
typeText = "bool";
break;
case cv::Param::INT:
typeText = "int";
break;
case cv::Param::REAL:
typeText = "real (double)";
break;
case cv::Param::STRING:
typeText = "string";
break;
case cv::Param::MAT:
typeText = "Mat";
break;
case cv::Param::ALGORITHM:
typeText = "Algorithm";
break;
case cv::Param::MAT_VECTOR:
typeText = "Mat vector";
break;
}
std::cout << "Parameter '" << param << "' type=" << typeText << " help=" << helpText << std::endl;
}
}