2

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

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

此调用不支持参数。例如 SURF、FAST 等都有很多参数。

我现在该如何更改它们?我已经弄清楚了其中的一部分,例如,我可以通过以下方式获取参数列表(字符串列表)

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

显然我需要以某种方式调用 cv::Algorithm* 对象set(char*, bool/int/float/... value),但我不知道如何。

4

1 回答 1

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;
    }
}
于 2012-06-16T15:04:39.817 回答