创建 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;
}
我想知道如何创建一个包含 "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;
}