我正在OpenCV中进行一些机器学习,而我正在使用决策树。我目前正在使用 OpenCV 3.0.0-rc1 。每当我尝试用我的训练数据和标签训练决策树时,我得到
在抛出'std :: bad_alloc'的实例后终止调用 what():std :: bad_alloc
或
分段错误
取决于我放入setMaxDepth();如果数字大于22,那就是bad_alloc,否则就是seg错误。 这是我的源代码:
//import data
Mat trainData=imread("/home/jetson/Documents/CB/ml/td.jpg",CV_LOAD_IMAGE_GRAYSCALE);
Mat labels=imread("/home/jetson/Documents/CB/ml/lab.jpg",CV_LOAD_IMAGE_GRAYSCALE);
//convert to the right type
trainData.convertTo(trainData,CV_32FC1);
labels.convertTo(labels,CV_32SC1);
transpose(trainData,trainData);
Ptr<ml::TrainData> tData = ml::TrainData::create(trainData, ml::ROW_SAMPLE, labels);
cout <<"Training data ready\n";
Ptr<ml::DTrees> dec_trees = ml::DTrees::create();
//params
dec_trees->setMaxDepth(1);
dec_trees->setMinSampleCount(10);
dec_trees->setRegressionAccuracy(0.01f);
dec_trees->setUseSurrogates(false);
dec_trees->setMaxCategories(2);
dec_trees->setCVFolds(10);
dec_trees->setUse1SERule(true);
dec_trees->setTruncatePrunedTree(true);
dec_trees->setPriors(Mat());
cout <<"Params set\n";
dec_trees->train(tData);
cout <<"Done!\n";`
除此之外,当我尝试使用相同的数据训练SVM模型时,使用相同的步骤(如下),它可以正常工作。
Ptr<ml::SVM> svm = ml::SVM::create();
//params
svm->setType(ml::SVM::C_SVC);
svm->setKernel(ml::SVM::POLY);
svm->setGamma(3);
svm->setDegree(0.1);
cout <<"Params set\n";
svm->train(tData);
cout <<"Done!\n";
我需要指出的是,当我尝试训练模型时会发生错误。我正在使用决策树的默认参数,如OpenCV文档页面所示。 有谁知道这里有什么问题以及如何解决我的问题?
提前致谢。
编辑:我将OpenCV升级到版本3.0.0并且问题保持不变