机器学习之-利用svm(支持向量机)分类(opencv3)
2017-10-24 18:49
459 查看
svm分类算法在opencv3中有了很大的变动,取消了CvSVMParams这个类,因此在参数设定上会有些改变。
opencv中的svm分类代码,来源于libsvm。
opencv中的svm分类代码,来源于libsvm。
int main(int argc, char** argv) { // visual representation int width = 512; int height = 512; cv::Mat image = cv::Mat::zeros(height, width, CV_8UC3); // training data int labels[4] = { 1, -1, -1, -1 }; float trainingData[4][2] = { { 501, 10 },{ 255, 10 },{ 501, 255 },{ 10, 501 } }; cv::Mat trainingDataMat(4, 2, CV_32FC1, trainingData); cv::Mat labelsMat(4, 1, CV_32SC1, labels); // initial SVM cv::Ptr<cv::ml::SVM> svm = cv::ml::SVM::create(); svm->setType(cv::ml::SVM::Types::C_SVC); svm->setKernel(cv::ml::SVM::KernelTypes::LINEAR); svm->setTermCriteria(cv::TermCriteria(cv::TermCriteria::MAX_ITER, 100, 1e-6)); // train operation svm->train(trainingDataMat, cv::ml::SampleTypes::ROW_SAMPLE, labelsMat); // prediction cv::Vec3b green(0, 255, 0); cv::Vec3b blue(255, 0, 0); for (int i = 0; i < image.rows; i++) { for (int j = 0; j < image.cols; j++) { cv::Mat sampleMat = (cv::Mat_<float>(1, 2) << j, i); float respose = svm->predict(sampleMat); if (respose == 1) image.at<cv::Vec3b>(i, j) = green; else if (respose == -1) image.at<cv::Vec3b>(i, j) = blue; } } int thickness = -1; int lineType = cv::LineTypes::LINE_8; cv::circle(image, cv::Point(501, 10), 5, cv::Scalar(0, 0, 0), thickness, lineType); cv::circle(image, cv::Point(255, 10), 5, cv::Scalar(255, 255, 255), thickness, lineType); cv::circle(image, cv::Point(501, 255), 5, cv::Scalar(255, 255, 255), thickness, lineType); cv::circle(image, cv::Point(10, 501), 5, cv::Scalar(255, 255, 255), thickness, lineType); thickness = 2; lineType = cv::LineTypes::LINE_8; cv::Mat sv = svm->getSupportVectors(); for (int i = 0; i < sv.rows; i++) { const float* v = sv.ptr<float>(i); cv::circle(image, cv::Point((int)v[0], (int)v[1]), 6, cv::Scalar(128, 128, 128), thickness, lineType); } cv::imshow("SVM Simple Example", image); cv::waitKey(0); return 0; }
相关文章推荐
- 在opencv3中实现机器学习之:利用svm(支持向量机)分类
- opencv机器学习 Haar特征 LBP特征 adaboost集成学习 级联分类器 支持向量机SVM 主成分分析PCA 人工神经网络(ANN) 笑脸检测 SVM分类 笑脸 检测
- 基于qt和opencv3实现机器学习之:利用svm(支持向量机)分类
- 【机器学习】推导支持向量机SVM二分类
- 【机器学习】使用Scikit-Learn库实现支持向量机(SVM)最大化分类间隔
- 在opencv3中利用SVM进行图像目标检测和分类
- 机器学习分类篇-支持向量机SVM上
- opencv3/C++ 机器学习-SVM应用实例:药品(胶囊)识别与分类
- 机器学习(七、八):SVM(支持向量机)【最优间隔分类、顺序最小优化算法】
- 【opencv机器学习】支持向量机SVM的程序
- 【opencv、机器学习】opencv中的SVM图像分类(二)
- 利用SVM支持向量机对彩色图像进行分割并使用OpenCV进行实现
- 利用SVM(支持向量机)和MNIST库在OpenCV环境下实现手写数字0~9的识别
- 在opencv3中利用SVM进行图像目标检测和分类
- 机器学习(九):CS229ML课程笔记(5)——支持向量机(SVM),最优间隔分类,拉格朗日对偶性,坐标上升法,SMO
- OpenCV之ml 模块. 机器学习:支持向量机(SVM)介绍 支持向量机对线性不可分数据的处理
- opencv3/C++ 机器学习-支持向量机SVM
- 利用opencv的hog+svm实现细胞识别分类器
- 机器学习---支持向量机(SVM)算法应用(上)
- 机器学习中的算法(2)-支持向量机(SVM)基础 - LeftNotEasy - 博客园