2015-06-24 30 views

回答

0

唯一的辦法 - 減少OpenCV並從中獲得所有選票。你可以在文件「svm.cpp」中看到它。 我預測函數添加以下代碼:

bool Yes = false; 
    if(_results.needed()) 
    { 
     _results.create(class_count+1, 1, samples.type()); 
     results = _results.getMat(); 
     Yes = true; 
    } 
    else 
    { 
     CV_Assert(nsamples == 1); 
     results = Mat(1, 1, CV_32F, &result); 
    } 

    PredictBody invoker(this, samples, results, returnDFVal); 
    if(nsamples < 10) 
     invoker(Range(0, nsamples)); 
    else 
     parallel_for_(Range(0, nsamples), invoker); 
    if (Yes) 
    { 
     result = results.at<float>(class_count); 
    } 
    return result; 

而這種代碼PredictBody

if (results->cols + results->rows > 2) 
    { 
     for (int jk = 0; jk < class_count; jk++) 
      results->at<float>(jk) = (float)vote[jk]; 
     results->at<float>(class_count) = result; 
    } 
    else 
      results->at<float>(si) = result; 

所以,我收回所有需要的選票來自OpenCV的。 但是,正如你可以從svm.cpp看到的,沒有正常的方法來做到這一點。

+0

我沒有理解答案。我在Emgu.CV.ML庫中使用了預先編譯好的svm,並且使用了你的方法「predictbody」,它在哪裏編碼?另外一個問題請。關於TH EMULTI-CLASS SVM? Emgu.CV.ML中的預定義的SVM是多類(p。我已經嘗試過多類案例的LibSVM,我不確定它是否可以成功運行)謝謝 – user3339324