创建CvSVM向量的向量(数组)

时间:2015-10-23 08:15:33

标签: c++ opencv vector svm

我想知道创建一个" CvSVM"对象。我尝试过使用:

vector<CvSVM> svm_bank;

但每当我使用时:

new_model.train(training_inputs, targets, Mat(), Mat(), svm_params);
svm_bank.push_back(new_model);

我收到此错误:

  

c:\ program files(x86)\ microsoft visual studio   12.0 \ vc \ include \ xmemory0(593):错误C2248:&#39; CvSVM :: CvSVM&#39; :无法访问类&#39; CvSVM&#39;

中声明的私有成员

我使用Visual Studio 2013,OpenCV版本2.4.11。

2 个答案:

答案 0 :(得分:1)

我找到了解决方案。这是Miki的修改版。由于Miki的代码正在编译,但在执行代码时出现了运行时错误。

这解决了这个问题。

#include <opencv2\opencv.hpp>
#include <vector>

using namespace std;
using namespace cv;

int main()
{
    vector<Ptr<SVM>> svm_bank;

    for (int i = 0; i < 3; ++i)
    {
        Mat trainData;
        Mat responses;

        /*Code for trainingData and 
        responses */

        SVM *new_model;
        new_model = new SVM;
        new_model->train(trainData, responses);

        svm_bank.push_back(new_model);
    }

    for (int i = 0; i < 3; ++i)
    {
        Mat samples;
        Mat results;
        svm_bank[i]->predict(samples, results);
    }

    return 0;
}

答案 1 :(得分:0)

std :: vector :: push_back将尝试调用复制构造函数,正如您所见,in the header被标记为私有。

我建议使用emplace_back(),它在添加时直接构造对象。直接调用train()的构造函数重载存在,因此它是一个选项。

svm_bank.emplace_back(training_inputs, targets, Mat(), Mat(), svm_params);