OpenCV 3 and SVM training
OpenCV 3 and SVM training
我已经搜索了这种类型的错误,但没有找到类似的东西......
我的问题与opencv3和SVM有关。基本上,我有这个:
int labels[2] = {1, -1};
Mat labelsMat(2, 1, CV_32S, labels);
float trainingData[2][2] = { { 501, 10 }, { 255, 10 } };
Mat training_samples(2, 2, CV_64FC1, trainingData);
...
training_samples.convertTo(training_samples, CV_32S);
labelsMat.convertTo(labelsMat, CV_32F);
Ptr<ml::SVM> svm = ml::SVM::create();
svm->setType(ml::SVM::C_SVC);
svm->setKernel(ml::SVM::LINEAR);
svm->setC(1);
svm->train(training_samples, ml::SampleTypes::ROW_SAMPLE, labelsMat);
编译时,出现此错误:
OpenCV 错误:错误的参数(在分类问题的情况下,响应必须是分类的;要么在创建 TrainData 时指定 varType,要么传递整数响应(在训练中,文件/home/develop/_Morpheos/opencv/opencv/modules/ml/src/svm.cpp,第 1618 行在抛出 'cv::Exception' 的实例后终止 what((:/home/develop/_Morpheos/opencv/opencv/modules/ml/src/svm.cpp:1618: 错误:(-5(在分类问题的情况下,响应必须是分类的;在创建 TrainData 时指定 varType,或者在函数训练中传递整数响应
我几乎尝试了所有方法,但没有发现错误。
你能帮我吗?
CV_64F
表示double
,但你需要float
,即 CV_32F
.用:
// Change me!
Mat training_samples(2, 2, CV_32FC1, trainingData);
此外,无需转换为整数类型,因此您可以删除该行:
// Remove me!
training_samples.convertTo(training_samples, CV_32S);
标签在分类中应该是整数类型,因此还要删除:
// Remove me!
labelsMat.convertTo(labelsMat, CV_32F);
您可以在此处查看完整示例。
相关文章:
- 在 SVM-Struct 中未定义对 sqrt 的引用(已使用 -lm)
- 使用 SVM 进行分类,使用来自 Bag of Word 的词汇构建
- SVM 规模:找不到命令
- 将svm分类器设置为HOG检测器
- SVM 训练时间是否取决于输入数据的内容?
- OPENCV 3.4.1获取经过定制训练的线性SVM HOG DETECTMULTISCALE的原始形式
- 如何使用 dlib 训练或合并多个 .svm 并检测多个类
- 如何在OPENCV 2.4.13中导入训练有素的SVM检测器
- 如何使用2通道垫子中的OPENCV中使用SVM
- 如何在C++代码中使用 SVM Light?(可能无需从C++代码调用可执行文件)
- 贝叶斯和SVM分类器在OpenCV3中的实现
- OPENCV SVM-对象不属于任何受过训练的类
- C++中的对象序列化,用于存储 OpenCV 的 SVM 对象 [OpenCV 3.1.0]
- 断言 sv_count !=0 失败 - 函数 train_auto,SVM 类型 - EPS_SVR
- 支持向量机 (SVM) 与 K-NN 测试效率
- OpenCV 3 and SVM training
- 如何通过安卓NDK加载svm训练文件
- 在C++中使用 Matlab SVM 模型
- OpenCV SVM 分类器图像识别
- Opencv 3 SVM training