2015-10-28 89 views
4

我使用的OpenCV 3.0.0CvSVM并没有在此范围内的错误声明

我已经包括所有这些库和命名空间,但我仍然得到

“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

CvSVM定义在哪里?哪个头?并在什么名称空间? –

+0

使用'Ptr svm = SVM :: create();' – Miki

回答

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 
+0

感谢您的回答。我应该使用什么CvSVMParams? – korujzade

+1

查看更新的答案。你可以看[这里](http://stackoverflow.com/a/33319975/5008845)一个(相当复杂的)样本,或[这里](http://docs.opencv.org/3.0-beta/doc/ tutorials/ml/introduction_to_svm/introduction_to_svm.html)来自OpenCV教程 – Miki

相关问题