CvNormalBayesClassifier列车错误

时间:2011-08-23 09:04:58

标签: c++ opencv

我正在使用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元素的数组。 M1CvNormalBayesClassifier

我得到的错误就是这个:

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

中止

感谢您的任何建议

2 个答案:

答案 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类型,trainres矩阵只是重新解释int的位和双精度浮点数。而且您的CvNormalBayesClassifier只看到垃圾而不是真实数据。