首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >贝叶斯和svm分类器在opencv3中的实现

贝叶斯和svm分类器在opencv3中的实现
EN

Stack Overflow用户
提问于 2018-03-08 07:47:16
回答 1查看 51关注 0票数 1

我想在BayesSVM分类器中实现OpenCV 3.3。我为SVM编写了以下代码

代码语言:javascript
复制
int main()
{
// Load data

FileStorage fs("newStorageFile.yml", FileStorage::READ);

// Read data

Mat test_data, test_labels, enrol_data, enrol_labels;
Mat train_labels = Mat::zeros(650, 1, CV_32S);
Mat train_data = Mat::zeros(650, 600, CV_32S);

fs["train_data"] >> train_data;
fs["train_labels"] >> train_labels;
fs["test_data"] >> test_data;
fs["test_labels"] >> test_labels;
fs["enrol_data"] >> enrol_data;
fs["enrol_labels"] >> enrol_labels;


Ptr<ml::SVM> SVM_Model = ml::SVM::create();
SVM_Model->setType(ml::SVM::C_SVC);
SVM_Model->setKernel(ml::SVM::RBF);

Ptr<ml::TrainData> trainingData = ml::TrainData::create(train_data, ml::SampleTypes::ROW_SAMPLE, train_labels);
SVM_Model->trainAuto(trainingData);

return 0;
}

但是我在SVM_Model->trainAuto(trainingData)上有下面的异常错误。

代码语言:javascript
复制
Unhandled exception at 0x755B5608 in SVMimplemantation.exe: Microsoft C++ exception: cv::Exception at memory location 0x00D8DF58.

还有关于Bayes分类器,我编写了以下代码:

代码语言:javascript
复制
int main()
{
// Load data

FileStorage fs("newStorageFile.yml", FileStorage::READ);

// Read data

Mat test_data, test_labels, enrol_data, enrol_labels;
Mat train_labels = Mat::zeros(650, 1, CV_32F);
Mat train_data = Mat::zeros(650, 600, CV_32F);

fs["train_data"] >> train_data;
fs["train_labels"] >> train_labels;
fs["test_data"] >> test_data;
fs["test_labels"] >> test_labels;
fs["enrol_data"] >> enrol_data;
fs["enrol_labels"] >> enrol_labels;

Ptr<ml::NormalBayesClassifier> bayes = ml::NormalBayesClassifier::create();
Ptr<ml::TrainData> trainData = ml::TrainData::create(train_data, ml::SampleTypes::ROW_SAMPLE, train_labels);
bayes->train(trainData);

Mat output, outputProb;

bayes->predictProb(test_data, output, outputProb);

return 0;
}

关于这个案例,我在bayes->train(trainData)上也有下面的例外。

代码语言:javascript
复制
Unhandled exception at 0x755B5608 in BayesImplementation.exe: Microsoft C++ exception: cv::Exception at memory location 0x00A5D79C.

为了能够编译这个项目,我上传了我的数据集这里。有什么问题,如何解决?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-08 11:38:28

问题是train_label的类型。试着做以下几点:

代码语言:javascript
复制
Mat train_labels32S = Mat::zeros(train_labels.rows, 1, CV_32S);

for (int i = 0; i < train_labels.rows; i++)
    train_labels32S.at<int>(i, 0) = train_labels.at<int>(i, 0);
//some code
    Ptr<ml::TrainData> trainingData = ml::TrainData::create(train_data, ml::SampleTypes::ROW_SAMPLE, train_labels32S);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49167932

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档