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 に答える