未在此范围内声明CvSVM错误

时间:2015-10-28 17:16:00

标签: c++ opencv opencv3.0

我正在使用OpenCV 3.0.0

我已经包含了所有这些库和命名空间,但我仍然得到错误#34; CvSVM未在此范围内声明"

#include <opencv2/core.hpp>
#include <opencv2/imgproc.hpp>
#include "opencv2/imgcodecs.hpp"
#include <opencv2/highgui.hpp>
#include <opencv2/ml.hpp>

using namespace cv;
using namespace cv::ml;
using namespace std;

当我运行此代码时:

CvSVM svm;

我收到了错误。

1 个答案:

答案 0 :(得分:3)

在OpenCV 3.0中CvSVM已重命名为SVM并已移至命名空间cv::ml(实际上也在以前版本SVM中是CvSVM的typedef)

由于SVM是一个抽象类,因此无法实例化它。您需要致电SVM::create()

所以你需要这样做:

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

或简单地说:

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

您不再需要CvSVMParams了。只需将参数直接设置为svm

即可
Ptr<SVM> svm = SVM::create();
svm->setType(SVM::C_SVC);
svm->setKernel(SVM::RBF);
// etc