0
我正在尝试使用OpenCV和SVM进行培训。 但我有一个问题,正是这个错误:关于OpenCV Mat错误的SVM(列车数据必须是浮点矩阵)
OpenCV Error: Bad argument (train data must be floating-point matrix) in cvCheckTrainData
我必须做的一列火车在图像的数据集,每一个图像具有68点(X,Y),我使用做SVM。
在开始的时候,这是我的代码:
//for each image
fin_land.open(str_app); assert(fin_land);
for (int i=(0+(68*count_FOR)); i<(num_landCKplus+(68*count_FOR)); i++) {
fin_land >> f1;
fin_land >> f2;
int data[2] = {(int)f1, (int)f2};
Mat actual(1, 2, CV_32FC1, &data);
trainData.push_back(actual);
}
// SVM
CvSVMParams params;
params.svm_type = CvSVM::NU_SVC;
params.kernel_type = CvSVM::POLY;
trainData = trainData.reshape(1, #numImage);
SVM.train(trainData, trainLabels, Mat(), Mat(), params);
这段代码的问题是,我想用一个垫子用68行2列的测试,因为每培训类在我的SVM有2列,但我收到此错误:
OpenCV Error: Incorrect size of input array (Input sample must be 1-dimensional vector) in cvPreparePredictData
如果我理解正确的,问题是,测试垫的尺寸必须是唯一的一维。所以,我认为要修改这样我的代码:
//for each image
fin_land.open(str_app); assert(fin_land);
for (int i=(0+(68*count_FOR)); i<(num_landCKplus+(68*count_FOR)); i++) {
fin_land >> f1;
fin_land >> f1;
int data = (int)f1;
trainData.push_back(&data);
data = (int)f2;
trainData.push_back(&data);
}
现在每天的训练级只有一列,因此测试的连垫,但我有一个新的错误,它说:
OpenCV Error: Bad argument (train data must be floating-point matrix) in cvCheckTrainData
问题是trainingSet的新mat的类型是错误的? 我也不知道如何解决它...
谢谢你..似乎是确定..但现在我卡住培训,不返回任何错误。我试图等待,但随着582 * 544训练矩阵这似乎很奇怪,它需要这么长时间...这可能是一个过度修复的问题? – luke88 2014-12-09 12:46:40