Opencv 3 SVM培训
c++
machine-learning
opencv
svm
5
0

您可能知道,OpenCV 3发生了很多变化(与openCV2或旧的第一个版本相比)。

在过去,要训练SVM可以使用:

CvSVMParams params;
params.svm_type = CvSVM::C_SVC;
params.kernel_type = CvSVM::POLY;
params.gamma = 3;

CvSVM svm;
svm.train(training_mat, labels, Mat(), Mat(), params);

在API的第三个版本中,既没有CvSVMParams也没有CvSVM 。出乎意料的是,有一个关于SVM的文档页面 ,但它说明了所有内容,但没有说明如何真正使用它(至少我无法弄清楚)。而且,互联网上似乎没有人使用OpenCV 3.0的SVM。

目前,我仅能获得以下信息:

ml::SVM.Params params;
params.svmType = ml::SVM::C_SVC;
params.kernelType = ml::SVM::POLY;
params.gamma = 3;

能否请您提供一些信息,如何将实际培训重写为openCV 3?

参考资料:
Stack Overflow
收藏
评论
共 3 个回答
高赞 时间 活跃

我将我的代码从OpenCV 2.4.9移植到3.0.0-rc1,并遇到了同样的问题。不幸的是,自从答案发布以来,API发生了变化,因此我想相应地进行更新:

Ptr<ml::SVM> svm = ml::SVM::create();
svm->setType(ml::SVM::C_SVC);
svm->setKernel(ml::SVM::POLY);
svm->setGamma(3);

Mat trainData; // one row per feature
Mat labels;    
Ptr<ml::TrainData> tData = ml::TrainData::create(trainData, ml::SampleTypes::ROW_SAMPLE, labels);
svm->train(tData);
// ...
Mat query; // input, 1channel, 1 row (apply reshape(1,1) if nessecary)
Mat res;   // output
svm->predict(query, res);
收藏
评论

与opencv3.0相比,肯定有区别,但并不难:

Ptr<ml::SVM> svm = ml::SVM::create();
// edit: the params struct got removed,
// we use setter/getter now:
svm->setType(ml::SVM::C_SVC);
svm->setKernel(ml::SVM::POLY);
svm->setGamma(3); 

Mat trainData; // one row per feature
Mat labels;    
svm->train( trainData , ml::ROW_SAMPLE , labels );
// ...
Mat query; // input, 1channel, 1 row (apply reshape(1,1) if nessecary)
Mat res;   // output
svm->predict(query, res);
收藏
评论

我知道这是一篇旧文章,但是我偶然发现它正在寻找相同的解决方案。本教程非常有帮助: http : //docs.opencv.org/3.0-beta/doc/tutorials/ml/introduction_to_svm/introduction_to_svm.html

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号