我正在使用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;
我收到了错误。
答案 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