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

Creating a vector(array) of CvSVM vector

我想知道如何创建一个包含 "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): error C2248: 'CvSVM::CvSVM' : cannot access private member declared in class 'CvSVM'

我用的是Visual Studio2013,OpenCV版本2.4.11.

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

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

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

我找到了解决方案。这是 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;
}