Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 训练SVM OpenCV 3.1-断言失败_C++_Opencv_Machine Learning_Computer Vision_Svm - Fatal编程技术网

C++ 训练SVM OpenCV 3.1-断言失败

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

属于我的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;
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))在setData
SVM\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 );