Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ opencv3支持向量机训练_C++_Opencv_Machine Learning_Svm_Opencv3.0 - Fatal编程技术网

C++ opencv3支持向量机训练

C++ opencv3支持向量机训练,c++,opencv,machine-learning,svm,opencv3.0,C++,Opencv,Machine Learning,Svm,Opencv3.0,您可能知道,OpenCV3中的许多内容都发生了变化(与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的第三个版本中,没有C

您可能知道,OpenCV3中的许多内容都发生了变化(与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
。令人惊讶的是,有,但它告诉一切,但不知道如何真正使用它(至少我无法理解)。 此外,互联网上似乎没有人使用OpenCV 3.0中的SVM

目前,我只获得了以下信息:

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

您能给我提供一些信息吗,如何将实际培训改写为openCV 3?

使用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);
Ptr-svm=ml::svm::create();
//编辑:已删除params结构,
//我们现在使用setter/getter:
svm->setType(ml::svm::C_SVC);
svm->setKernel(ml::svm::POLY);
svm->setGamma(3);
Mat trainData;//每个要素一行
垫子标签;
svm->train(trainData,ml::ROW_样本,标签);
// ...
Mat query;//输入,1通道,1行(如果需要,则应用重塑(1,1))
Mat res;//输出
svm->predict(查询,res);

我将代码从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);
Ptr-svm=ml::svm::create();
svm->setType(ml::svm::C_SVC);
svm->setKernel(ml::svm::POLY);
svm->setGamma(3);
Mat trainData;//每个要素一行
垫子标签;
Ptr tData=ml::TrainData::create(TrainData,ml::SampleTypes::ROW_样本,标签);
支持向量机->训练(tData);
// ...
Mat query;//输入,1通道,1行(如果需要,则应用重塑(1,1))
Mat res;//输出
svm->predict(查询,res);

我知道这是一篇老文章,但我在寻找相同的解决方案时遇到了它。本教程非常有用:

非常有效,感谢您的快速响应!您能告诉我,res cv::Mat中的结果是如何表示的吗?它是否只包含标签cv::Mat中相同的值?res.at(0)将包含id。“something”在这里将是float或int,具体取决于标签的类型。此信息:“Mat query;//输入,1通道,1行(如果nessecary,则应用重塑(1,1)”极大地改变了我的实现成功。谢谢@Berako该教程仍然使用SVM::Params Params,这已经过时了。