opencv3.2中SVM,KNN算法的使用

SVM分类器

opencv3.2中机器学习算法的使用与之前的版本不同,假设训练数据(分类样本)为Mat TrainData(这里统一在Reshape为一行之后变为CV_32FC1),对应训练数据(分类标签)为Mat TrainLabels(这里使用CV_32SC1类型);

// 创建SVM分类器并且配置分类器属性:

	Ptr<SVM> svm = SVM::create();
	svm->setType(SVM::C_SVC);
	svm->setKernel(SVM::LINEAR);
	svm->setTermCriteria(TermCriteria(TermCriteria::MAX_ITER, 100, 1e-6));

// 设置训练数据,训练SVM,保存训练结果:

	Ptr<TrainData> tData = TrainData::create(TrainData, ROW_SAMPLE, TrainLabels);
	svm->train(tData);  
	svm->save("SVMdata.xml"); 

// 如果SVM分类器是经过训练的,将训练后的数据载入:

	Ptr<SVM> svm = SVM::load("SVMdata.xml");

// 预测分类信息:

        Mat pre;  // 将预测结果保存于矩阵
        svm->predict(PredictImage, pre);

        int result = svm->predict(PredictImage); // 将预测结果直接输出,用于一个结果的预测
注意:在用SVM进行预测时,Mat PredictImage类型要与训练的数据一致,这里是 CV_32FC1类型。


KNN分类器

这里KNN的训练数据是图像的HOG特征!!!

// 创建KNN分类器并且配置分类器属性:

	int K = 1;
        Ptr<KNearest> knn = KNearest::create();
	knn->setDefaultK(K);
	knn->setIsClassifier(true);
// 设置训练数据,训练KNN,保存训练结果:
	Ptr<TrainData> tData = TrainData::create(KnnTrainData, ROW_SAMPLE, KnnTrainLabels);
	knn->train(tData);
	knn->save("KnnRecogDigit.txt");
// 如果KNN分类器是经过训练的,将训练后的数据载入:
        Ptr<KNearest> knn = Algorithm::load<KNearest>("KnnRecogDigit.txt");

// 预测分类信息:

        int result = knn->predict(fileImageHOG);



猜你喜欢

转载自blog.csdn.net/wwwssszheren/article/details/79542693
今日推荐