简体   繁体   English

未在此范围内声明CvSVM错误

[英]CvSVM was not declared in this scope Error

I am using OpenCV 3.0.0 我正在使用OpenCV 3.0.0

I have included all these libraries and namespaces,but I still get the error of "CvSVM is not declared in this scope" 我已经包含了所有这些库和命名空间,但我仍然得到“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;

When I run this code: 当我运行此代码时:

CvSVM svm;

I get the error. 我收到了错误。

In OpenCV 3.0 CvSVM has been renamed to SVM and moved to namespace cv::ml (actually also in previous version SVM was a typedef for CvSVM ). 在OpenCV 3.0中, CvSVM已重命名为SVM并移至命名空间cv::ml (实际上在先前版本中, SVM也是CvSVM的typedef)。

Since SVM is an abstract class, you can't instantiate it. 由于SVM是一个抽象类,因此无法实例化它。 You need to call SVM::create() . 你需要调用SVM::create()

So you need to do: 所以你需要这样做:

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

or simply: 或者干脆:

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

You don't need CvSVMParams anymore. 你不再需要CvSVMParams了。 Simply set the parameters directly to the svm : 只需将参数直接设置为svm

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM