C++ OpenCV Adaboost:“;未实现该功能/特性”;
我有来自两个类的一些对象的特征向量,我的目标是用这些信息训练一个增强的分类器。在查看和字母识别示例后,我认为这样做很简单,但由于某些原因,在训练分类器时,我得到以下错误: OpenCV错误:未实现该函数/功能(增强的树只能用于2类分类。) 以下是我的代码的相关部分:C++ OpenCV Adaboost:“;未实现该功能/特性”;,c++,opencv,machine-learning,classification,adaboost,C++,Opencv,Machine Learning,Classification,Adaboost,我有来自两个类的一些对象的特征向量,我的目标是用这些信息训练一个增强的分类器。在查看和字母识别示例后,我认为这样做很简单,但由于某些原因,在训练分类器时,我得到以下错误: OpenCV错误:未实现该函数/功能(增强的树只能用于2类分类。) 以下是我的代码的相关部分: Mat X = Mat::zeros(train_size, feat_size, CV_32F); Mat Y = Mat::zeros(train_size, 1, CV_32S); // filling of X with
Mat X = Mat::zeros(train_size, feat_size, CV_32F);
Mat Y = Mat::zeros(train_size, 1, CV_32S);
// filling of X with the corresponding features for each training sample
// filling of Y with labels 1 and -1 depending on the class
CvBoostParams params(CvBoost::DISCRETE, 100, 0.95, 1, false, 0);
Mat var_type = Mat(feat_size+1, 1, CV_8U, Scalar::all(CV_VAR_ORDERED));
var_type.ptr<uchar>(feat_size)[1] = CV_VAR_CATEGORICAL;
CvBoost boost;
boost.train(X, CV_ROW_SAMPLE, Y, Mat(), Mat(), var_type, Mat(), params);
Mat X=Mat::zero(序列尺寸、专长尺寸、CV尺寸32F);
材料Y=材料::零(系列尺寸,1,CV_32S);
//用每个训练样本的相应特征填充X
//根据类别使用标签1和-1填充Y
CvBoostParams参数(CvBoost::离散,100,0.95,1,false,0);
Mat var_type=Mat(专长大小+1,1,CV_8U,标量::全部(CV_var_有序));
变量类型.ptr(专长大小)[1]=CV\u变量类型;
CvBoost-boost;
推进序列(X,CV_行样本,Y,Mat(),Mat(),var_类型,Mat(),参数);
我认为这里的问题是var_型垫。据我所知,它必须包含每个功能一个条目加上一个响应条目。因为我的特征都是数值测量,所以我将第一个元素设置为CV_VAR_ORDERED,最后一个元素设置为CV_VAR_category
有人能解释一下为什么OpenCV不是两级分类吗
另一件事:对于预测,我不想要实际的预测标签,而是想要属于类1的概率。如果我能得到加权票数的总和,这其实不难计算。predict方法有一个标志returnSum,但该标志表示:如果为true,则返回投票总数,而不是类标签。他们真的是指票数之和还是加权票数之和