C++ 随机树CvRTrees持久性问题opencv

C++ 随机树CvRTrees持久性问题opencv,c++,opencv,computer-vision,C++,Opencv,Computer Vision,我正在尝试使用Opencv实现一个随机树分类器。我成功地用opencv实现了它,并且它正在工作 然后我决定将培训部分与分类部分分开。 这样做的目的是保存经过训练的森林,并在需要分类时将其重新加载 我尝试了两种不同的方式: 使用超类的写入和读取方法 使用超类的存储和加载方法 但是,没有将树保存到文件的旧实现的结果是不同的,而且是最糟糕的 以下代码是第二点的实现: 要存储它,请执行以下操作: for (unsigned i=0; i<scenes.size(); ++i) { ch

我正在尝试使用Opencv实现一个随机树分类器。我成功地用opencv实现了它,并且它正在工作

然后我决定将培训部分与分类部分分开。 这样做的目的是保存经过训练的森林,并在需要分类时将其重新加载

我尝试了两种不同的方式:

  • 使用超类的写入和读取方法
  • 使用超类的存储和加载方法
  • 但是,没有将树保存到文件的旧实现的结果是不同的,而且是最糟糕的

    以下代码是第二点的实现:

    要存储它,请执行以下操作:

    for (unsigned i=0; i<scenes.size(); ++i) {
          char class_fname[50];
          char output[100];
          sprintf(class_fname,"class_%d.xml",i);
          sprintf(output,"class_%d",i);
          //classifiers[i]->save(class_fname,output);
          classifiers[i]->save(class_fname);
        }
    
    for(无符号i=0;isave(类名称,输出);
    分类器[i]->save(类名称);
    }
    
    要重新加载它们,请执行以下操作:

     for (unsigned int i = 0; i<CLUSTERING_N_CENTERS;i++){
        char class_fname[50];
        char output[100];
        sprintf(class_fname,"class_%d.xml",i);
        sprintf(output,"class_%d",i);
        classifiers[i] = new CvRTrees();
        //classifiers[i]->load(class_fname,output);
        classifiers[i]->load(class_fname);
      }
    
    for(无符号整数i=0;iload(类名称,输出);
    分类器[i]->负载(类名称);
    }
    
    我正在使用opencv 2.4.6
    有人对此代码有什么建议吗?

    这是由于文件错误导致的错误

    所以坚持是有效的

    但如果有人需要实现它,我会将此帖子作为示例