2012-06-12 38 views
2

在最近的版本中,OpenCV允许使用create函数轻松创建关键点检测器,描述符或匹配器。OpenCV在创建后更改关键点或描述符参数

cv::Ptr<cv::FeatureDetector> featureDetector = cv::FeatureDetector::create("FAST") 

这个调用支护参数。例如。 SURF,FAST等都有很多参数。

我该如何改变它们?我已经想出了它的一部分,例如我可以通过

std::vector<std::string> parameters; 
featureDetector->getParams(parameters); 

得到的参数列表(字符串列表),显然我需要以某种方式获得的CV ::算法*对象调用set(char*, bool/int/float/... value),但我不知道怎么办。

+0

呵呵笑我太愚蠢。 featureDetector IS已经是一个ALgorithm对象。只需调用'featureDetector-> set(“someParam”,someValue)' – NameZero912

+0

您应该删除此评论并将其作为答案以及接受答案,以便其他人可以看到答案。未来的游客可能会遇到同样的问题:) – mevatron

回答

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; 
    } 
} 
+0

'algorithm-> getParams(parameters)'...... – neouyghur