OpenCV изменяет параметры ключевой точки или дескриптора после создания

В последних версиях OpenCV позволяет легко создавать детекторы, дескрипторы или сопоставители ключевых точек с помощью функции создания, например,

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), но я не знаю как.

 NameZero91212 июн. 2012 г., 17:52
О боже, я такой тупой. featureDetector - это уже объект ALgorithm. Просто позвониfeatureDetector->set("someParam", someValue)
 mevatron12 июн. 2012 г., 21:25
Вы должны удалить этот комментарий и сделать его ответом, а также принять его, чтобы другие могли видеть, что на него дан ответ. У будущих посетителей может быть такая же проблема :)

Ответы на вопрос(1)

Решение Вопроса

На самом деле, как оказалось,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;
    }
}
 11 апр. 2015 г., 18:56
Я получил ошибку сегментации вalgorithm->getParams(parameters)... :(

Ваш ответ на вопрос