未在此范围内声明 CvSVM 错误

Posted

技术标签:

【中文标题】未在此范围内声明 CvSVM 错误【英文标题】:CvSVM was not declared in this scope Error 【发布时间】:2015-10-28 17:15:59 【问题描述】:

我正在使用 OpenCV 3.0.0

我已经包含了所有这些库和命名空间,但我仍然收到“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;

我得到了错误。

【问题讨论】:

CvSVM 是在哪里定义的?哪个标头?在什么命名空间中? 使用Ptr&lt;SVM&gt; svm = SVM::create(); 【参考方案1】:

在 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

【讨论】:

感谢您的回答。我应该为 CvSVMParams 使用什么? 查看更新的答案。您可以查看 here 以获得(相当复杂的)示例,或查看 OpenCV 教程中的 here

以上是关于未在此范围内声明 CvSVM 错误的主要内容,如果未能解决你的问题,请参考以下文章

C++ 错误:未在此范围内声明类/对象

Arduino:错误:“abs”未在此范围内声明

C++ 错误:“QueryFullProcessImageNameA”未在此范围内声明

错误:to_string 未在此范围内声明

错误:`itoa` 未在此范围内声明

错误:____未在此范围内声明