Opencv 3 SVM 训练 [英] Opencv 3 SVM training
问题描述
如您所知,OpenCV 3 中的许多内容都发生了变化(与 openCV2 或旧的第一个版本相比).
As you may know, many things changed in OpenCV 3 (in comparision to the openCV2 or the old first version).
在过去,训练 SVM 会使用:
In the old days, to train SVM one would use:
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.
In the third version of API, there is no CvSVMParams
nor CvSVM
. Surprisingly, there is a documentation page about SVM, but it tells everything, but not how to really use it (at least I cannot make it out).
Moreover, it looks like no one in the Internet uses SVM from OpenCV's 3.0.
目前,我只能得到以下内容:
Currently, I only managed to get the following:
ml::SVM.Params params;
params.svmType = ml::SVM::C_SVC;
params.kernelType = ml::SVM::POLY;
params.gamma = 3;
能否请您提供信息,如何将实际训练重写为 openCV 3?
Can you please provide me with information, how to rewrite the actual training to openCV 3?
推荐答案
和 opencv3.0 肯定不一样,但也不难:
with opencv3.0, it's definitely different , but not difficult:
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);
这篇关于Opencv 3 SVM 训练的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!