C++ 训练SVM OpenCV 3.1-断言失败
属于我的OpenCV 3.1和Qt Creator的实际问题。根据我在自己的项目中尝试实施的报告 如果我想训练我的SVM,我会得到以下错误: OpenCV错误:setData文件C:…\OpenCV master\modules\ml\src\data.cpp第259行中的断言失败(samples.type()==CV|32F | | samples.type()==CV|32S) 下面列出了我的部分代码C++ 训练SVM OpenCV 3.1-断言失败,c++,opencv,machine-learning,computer-vision,svm,C++,Opencv,Machine Learning,Computer Vision,Svm,属于我的OpenCV 3.1和Qt Creator的实际问题。根据我在自己的项目中尝试实施的报告 如果我想训练我的SVM,我会得到以下错误: OpenCV错误:setData文件C:…\OpenCV master\modules\ml\src\data.cpp第259行中的断言失败(samples.type()==CV|32F | | samples.type()==CV|32S) 下面列出了我的部分代码 int num_files = 205; int img_area = 55*66; Ma
int num_files = 205;
int img_area = 55*66;
Mat training_mat(num_files,img_area, CV_32FC1);
vector<int> label;
//Labels: 1-138 == 1 | 139-205 == 0
for(int i = 0; i < 139; i++)
{
label.push_back(1);
}
for(int i = 139; i < 206; i++)
{
label.push_back(0);
}
Mat classes;
Mat(label).copyTo(classes);
// Imread Pictures
for(int c = 1; c < num_files; c++)
{
ostringstream name;
name << "../Name_" << c << ".png";
img_mat = imread(name.str(),0);
int ii = 0;
for (int i = 0; i < img_mat.rows; i++)
{
for (int j = 0; j < img_mat.cols; j++)
{
training_mat.at<float>(c,ii++) = (float)img_mat.at<uchar>(i,j);
}
}
}
training_mat.convertTo(training_mat, CV_32FC1);
int num_files=205;
int img_面积=55*66;
Mat培训Mat(num_文件、img_区域、CV_32FC1);
矢量标签;
//标签:1-138==1 | 139-205==0
对于(int i=0;i<139;i++)
{
标签。推回(1);
}
对于(int i=139;i<206;i++)
{
标签。推回(0);
}
垫类;
Mat(标签)。copyTo(类别);
//阅读图片
对于(int c=1;csetP(0);
svm->setTermCriteria(术语标准(CV_TERMCRIT_ITER,1000,0.01));
//训练支持向量机
svm->train(svm\u TrainingData,ml::ROW\u样本,svm\u类);
你知道具体的问题是什么吗?SVM\u TrainingData的类型是什么?我已经用xml文件的信息更新了我的帖子,为什么你要将
training\u mat
保存为“TrainingData”,但是你正在加载“x”?你好@Miki。谢谢你的回答。我更正了(可能的复制粘贴问题)现在,当我运行代码时,我得到以下错误。OpenCV错误:断言失败((layout==ROW\u SAMPLE&&responses.rows==nsamples)|(layout==COL\u SAMPLE&&responses.cols==nsamples))在setDataSVM\u TrainingData
行不等于SVM\u类
元素数
FileStorage fs("train_SVM.xml", FileStorage::WRITE);
fs << "ImagesCount" << num_files;
time_t rawtime; time(&rawtime);
fs << "createDate" << asctime(localtime(&rawtime));
fs << "TrainingData" << training_mat;
fs << "classes" << classes;
fs.release();
//Read file storage.
FileStorage fs;
fs.open("train_SVM.xml", FileStorage::READ);
Mat SVM_TrainingData;
Mat SVM_Classes;
fs["TrainingData"] >> SVM_TrainingData;
fs["classes"] >> SVM_Classes;
Ptr<ml::SVM> svm = ml::SVM::create();
//Set SVM params
svm->setType(ml::SVM::C_SVC);
svm->setKernel(ml::SVM::LINEAR);
svm->setDegree(0);
svm->setGamma(1);
svm->setCoef0(0);
svm->setC(1);
svm->setNu(0);
svm->setP(0);
svm->setTermCriteria(TermCriteria(CV_TERMCRIT_ITER, 1000, 0.01));
//Train SVM
svm->train( SVM_TrainingData, ml::ROW_SAMPLE , SVM_Classes );