OpenCV 3.0 svm总是预测为0(java)

时间:2016-01-11 15:53:40

标签: java opencv classification svm

我是opencv svm的新手。我尝试了一个样本分类器,但它只返回0作为预测标签。我甚至使用值5进行训练以及预测。

我一直在改变这些值大约一百次,但我只是没有弄错。我正在使用OpenCV 3.0和Java。这是我的代码:

    Mat labels = new Mat(new Size(1,4),CvType.CV_32SC1);
    labels.put(0, 0, 1);
    labels.put(1, 0, 1);
    labels.put(2, 0, 1);
    labels.put(3, 0, 0);

    Mat data = new Mat(new Size(1,4),CvType.CV_32FC1);
    data.put(0, 0, 5);
    data.put(1, 0, 2);
    data.put(2, 0, 3);
    data.put(3, 0, 8);

    Mat testSamples = new Mat(new Size(1,1),CvType.CV_32FC1);
    testSamples.put(0,0,5);

    SVM svm = SVM.create();
    TermCriteria criteria = new TermCriteria(TermCriteria.EPS + TermCriteria.MAX_ITER,100,0.1);
    svm.setKernel(SVM.LINEAR);
    svm.setType(SVM.C_SVC);
    svm.setGamma(0.5);
    svm.setNu(0.5);
    svm.setC(1);
    svm.setTermCriteria(criteria);

    //data is N x 64 trained data Mat , labels is N x 1 label Mat with integer values;
    svm.train(data, Ml.ROW_SAMPLE, labels);

    Mat results = new Mat();
    int predictedClass = (int) svm.predict(testSamples, results, 0);

即使我将标签更改为1和2,我仍然会得到0.0作为回复。所以有些事情必须是绝对错误的......我只是不知道该怎么做。请帮忙! :)

1 个答案:

答案 0 :(得分:1)

我在C ++中遇到了类似的问题。我不太确定它在Java中是否相同,但在C ++中,预测被保存在结果矩阵中而不是作为浮点数返回。