OpenCV CvSVM.predict()决策函数值

时间:2014-03-10 01:50:01

标签: c++ opencv svm

我用Bag of Words训练图像。但是,每次我更改if语句或符号中的条件值时,例如从if(response<0)if(response>0)或从if(response<-1)if(response<-0.5)我得到的结果不同results.push_back(response)。我无法弄清楚为什么会这样。我只改变了条件,就是这样。请帮我解决这个问题。提前谢谢。

int i, j;
for(i=1;i<=img.cols-width;i=i+20){
    for(j=1;j<=img.rows-height;j=j+20){
        vector<KeyPoint>keypoints;
        Mat ROI = img(Rect(i, j, w, h)); 
        detector.detect(ROI,keypoints);
        if (keypoints.data()){
        Mat bowDescriptor2;
        bowDE.compute(img,keypoints,bowDescriptor2);
        evalData.push_back(bowDescriptor2);
        std::cout<<"SVM predicting..."<<std::endl;
        float response = svm.predict(bowDescriptor2,1); 
        results.push_back(response);
        std::cout<<response<<std::endl; 
        if(response<0)
        { 
            static CvScalar RED = {0, 0, 255};
            rectangle(img, Point(i,j), Point(i+w,j+h), RED, 3, 8, 0);
            cvNamedWindow( "result", 1 );
            imshow( "result", img );
        }
        }

    }

}

1 个答案:

答案 0 :(得分:1)

我发现了我犯错误的地方。问题是我无法使用相同的图像作为输入rectangle(img, Point(i,j), Point(i+w,j+h), RED, 3, 8, 0)。因此,我阅读了图片并将其定义为img以及img2,然后我将img替换为img2中的rectangle