如何使用OpenCV 3.0.0制作基于颜色直方图的分类器

时间:2016-04-14 03:18:51

标签: c++ opencv visual-studio-2013 svm opencv3.0

我正在尝试使用OpenCV 3.0.0的CvSVM和颜色直方图制作分类器。我已经尝试使用以下代码创建自己的数据集:

    int labels[510];
    if (label.compare("raw")){
        for (int i = 0; i < 509; i++){
            labels[i] = 1;
        }
    }
    else if (label.compare("ripe")){
        for (int i = 0; i < 509; i++){
            labels[i] = 2;
        }
    }
    else if (label.compare("rotten")){
        for (int i = 0; i < 509; i++){
            labels[i] = 3;
        }
    }
    float trainingData[510][2];
    for (int i = 0; i < 254; i++){
        trainingData[i][1] = r_hist.at<float>(i - 1);
        trainingData[i][2] = i;
    }
    int j = 0;
    for (int i = 255; i < 509; i++){
        trainingData[i][1] = g_hist.at<float>(j - 1);
        trainingData[i][2] = i;
        j++;
    }

这个SVM的代码:

    int width = 512, height = 512;
    Mat image = Mat::zeros(height, width, CV_8UC3);
    Mat labelsMat(510, 1, CV_32SC1, labels);
    Mat trainingDataMat(510, 2, CV_32FC1, trainingData);

    Ptr < cv::ml::SVM > svm = SVM::create();

    svm = cv::Algorithm::load<ml::SVM>("svm.xml");
    svm->setC(0.01);
    svm->setType(ml::SVM::C_SVC);
    svm->setKernel(ml::SVM::LINEAR);
    svm->setTermCriteria((cvTermCriteria(TermCriteria::MAX_ITER, 100, 1e6)));

    svm->train(trainingDataMat, ROW_SAMPLE, labelsMat);
    svm->save("svm.xml");

上面代码的问题是它无法正常保存。有没有更好的方法呢?

0 个答案:

没有答案