OpenCV在创建后更改关键点或描述符参数

OpenCV在创建后更改关键点或描述符参数,opencv,parameters,Opencv,Parameters,在最新版本中,OpenCV允许使用创建功能轻松创建关键点检测器、描述符或匹配器,例如 cv::Ptr<cv::FeatureDetector> featureDetector = cv::FeatureDetector::create("FAST") cv::Ptr featureDetector=cv::featureDetector::create(“快速”) 此调用不支持参数。例如,冲浪、快速等都有许多参数 我现在怎样才能改变它们? 我已经找到了其中的一部分,例如,我可以通

在最新版本中,OpenCV允许使用创建功能轻松创建关键点检测器、描述符或匹配器,例如

cv::Ptr<cv::FeatureDetector> featureDetector = cv::FeatureDetector::create("FAST")
cv::Ptr featureDetector=cv::featureDetector::create(“快速”)
此调用不支持参数。例如,冲浪、快速等都有许多参数

我现在怎样才能改变它们? 我已经找到了其中的一部分,例如,我可以通过

std::vector<std::string> parameters;
featureDetector->getParams(parameters);
std::向量参数;
featureDetector->getParams(参数);

显然,我需要找到cv::Algorithm*对象来调用
集合(char*,bool/int/float/…value)
,但我不知道如何调用。

事实证明,
特性检测器已经是一个
算法
对象,也就是说,你可以直接在它上面设置参数,例如

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;
    }
}
void ClassificationUtilities::printParams(cv::Algorithm*Algorithm){
std::向量参数;
算法->获取参数(参数);
对于(int i=0;i<(int)parameters.size();i++){
std::string param=参数[i];
int type=算法->参数类型(param);
std::string helpText=算法->参数帮助(param);
std::字符串类型文本;
开关(类型){
案例cv::Param::BOOLEAN:
typeText=“bool”;
打破
案例cv::Param::INT:
typeText=“int”;
打破
案例cv::Param::REAL:
typeText=“实(双)”;
打破
案例cv::参数::字符串:
typeText=“string”;
打破
案例cv::Param::MAT:
typeText=“Mat”;
打破
案例cv::Param::算法:
typeText=“算法”;
打破
案例cv::Param::MAT_向量:
typeText=“Mat vector”;
打破
}

我好笨。featureDetector已经是一个算法对象了。只需调用
featureDetector->set(“someParam”,someValue)
您应该删除此评论,并将其作为答案,同时接受它,以便其他人可以看到它的答案。未来的访问者可能会遇到同样的问题:)我在
算法->获取参数(参数)
中遇到分段错误(