正确创建SVM训练矩阵(OpenCV,C ++)

时间:2014-12-19 07:26:10

标签: c++ opencv svm training-data

我正在尝试创建自己的SVM分类器,并且我一开始就陷入困境。我有两组正负图像数据,我想创建训练矩阵,将其传递给SVM。所以我读了this基本帖子,并尝试按照它说的那样做:

char* path_positive, path_negative;
int numPos, numNeg;
int imageWidth=130;
int imageHeight=160;

numPos= 176;
numNeg= 735;
path_positive= "C:\\SVM\\positive\\";
path_negative= "C:\\SVM\negative\\";

Mat classes(numPos+numNeg, 1, CV_32FC1);
Mat trainingMat(numPos+numNeg, imageWidth*imageHeight, CV_32FC1 );
vector<int> trainingLabels;

for(int file_num=0; file_num < numPos; file_num++)
{
    stringstream ss(stringstream::in | stringstream::out);
    ss << path_positive << file_num << ".jpg";
    Mat img = imread(ss.str(), CV_LOAD_IMAGE_GRAYSCALE);

    int ii = 0; // Current column in training_mat
        for (int i = 0; i<img.rows; i++) {
            for (int j = 0; j < img.cols; j++) {
                trainingMat.at<float>(file_num,ii++) = trainingMat.at<uchar>(i,j);
            }
    }
    trainingLabels.push_back(1);
}

但是当我启动这段代码时,我得到了Assertation failderror: 我知道,我犯了一些愚蠢的错误,因为我对openCV很新。 谢谢你的帮助。

编辑:此错误发生在:      trainingMat.at(file_num,ii ++)= trainingMat.at(i,j);

0 个答案:

没有答案