我正在使用OpenCv制作CvNormalBayesClassifier
,但是当我尝试训练它时,我收到错误。
这是我的代码:
CvMat train=cvMat(1, 32, CV_32FC1, val);
CvMat res=cvMat(1, 1, CV_32FC1, type);
M1.train(&train, &res);
其中val
是一个double数组,type
是一个只有一个int元素的数组。 M1
是CvNormalBayesClassifier
我得到的错误就是这个:
OpenCV Error: Bad argument (There is only a single class) in cvPreprocessCategoricalResponses, file /build/buildd/opencv-2.1.0/src/ml/ml_inner_functions.cpp, line 731
terminate called after throwing an instance of 'cv::Exception'
what(): /build/buildd/opencv-2.1.0/src/ml/ml_inner_functions.cpp:731: error: (-5) There is only a single class in function cvPreprocessCategoricalResponses
中止
感谢您的任何建议
答案 0 :(得分:1)
该错误意味着您的响应数组res是完全一致的(它必须是唯一的元素)。要么添加一个不同的值,以便培训师进行培训,或者告诉它你正在进行一流的培训:
CvSVMParams params;
params.svm_type = CvSVM::ONE_CLASS;
M1.train(train, res, Mat(), Mat(), params);
我没有使用过“ONE_CLASS”,所以你可能需要先给“nu”参数一个值(见OpenCV SVM doc page)。另外,我认为安培座是不必要的。
答案 1 :(得分:0)
首先,最后一个参数cvMat
函数具有void*
类型,因此它不知道数组的实际类型。因此,无法进行数据转换。但是您使用的CV_32FC1
常量假定float
类型,train
和res
矩阵只是重新解释int的位和双精度浮点数。而且您的CvNormalBayesClassifier
只看到垃圾而不是真实数据。