编译错误

In file included from /home/dong/color/color-detector/test.cpp:7:0:
/home/dong/color/color-detector/colorDetector.cpp:142:35: error: 'CvSVM' has not been declared
 void trainSVM(vector dirs,CvSVM& SVM){
                                   ^
/home/dong/color/color-detector/colorDetector.cpp: In function 'void trainSVM(std::vector >, int&)':
/home/dong/color/color-detector/colorDetector.cpp:179:5: error: 'CvSVMParams' was not declared in this scope
     CvSVMParams params;
     ^
/home/dong/color/color-detector/colorDetector.cpp:180:5: error: 'params' was not declared in this scope
     params.svm_type    = CvSVM::C_SVC;
     ^
/home/dong/color/color-detector/colorDetector.cpp:180:26: error: 'CvSVM' has not been declared
     params.svm_type    = CvSVM::C_SVC;
                          ^
/home/dong/color/color-detector/colorDetector.cpp:181:26: error: 'CvSVM' has not been declared
     params.kernel_type = CvSVM::POLY;
                          ^
/home/dong/color/color-detector/colorDetector.cpp:187:9: error: request for member 'train' in 'SVM', which is of non-class type 'int'
     SVM.train(trainingData, labels, Mat(), Mat(), params);
         ^
/home/dong/color/color-detector/colorDetector.cpp: At global scope:
/home/dong/color/color-detector/colorDetector.cpp:191:25: error: 'CvSVM' has not been declared
 int testSVM(Mat testImg,CvSVM& SVM){
                         ^
/home/dong/color/color-detector/colorDetector.cpp: In function 'int testSVM(cv::Mat, int&)':
/home/dong/color/color-detector/colorDetector.cpp:194:20: error: request for member 'predict' in 'SVM', which is of non-class type 'int'
     response = SVM.predict(testImg);
                    ^
/home/dong/color/color-detector/test.cpp: In function 'int main()':
/home/dong/color/color-detector/test.cpp:18:5: error: 'CvSVM' was not declared in this scope
     CvSVM SVM;
     ^
/home/dong/color/color-detector/test.cpp:19:5: error: 'SVM' was not declared in this scope
     SVM.load("../modell.xml");


原因

3.4版本OpenCV的分类器代码有很多的改动,命名方式也有所不同

使用定义 cv::ml::SVM SVM;

    // Train the SVM
    Ptr svm = SVM::create();
    svm->setType(SVM::C_SVC);
    svm->setKernel(SVM::LINEAR);
    svm->setTermCriteria(TermCriteria(TermCriteria::MAX_ITER, 100, 1e-6));
    svm->train(trainingDataMat, ROW_SAMPLE, labelsMat);



2.4.9版本的分类器定义如下:

// SVM model
class CV_EXPORTS_W CvSVM : public CvStatModel
{
public:
    // SVM type
    enum { C_SVC=100, NU_SVC=101, ONE_CLASS=102, EPS_SVR=103, NU_SVR=104 };

    // SVM kernel type
    enum { LINEAR=0, POLY=1, RBF=2, SIGMOID=3 };

    // SVM params type
    enum { C=0, GAMMA=1, P=2, NU=3, COEF=4, DEGREE=5 };

}

使用定义    CvSVM SVM;