基于qt和opencv3实现机器学习之:利用svm(支持向量机)分类
来源:互联网 发布:淘宝写手如何赚钱的 编辑:程序博客网 时间:2024/06/08 08:00
opencv中的svm分类代码,来源于libsvm.
第一步:在pro文件里面设置路径
INCLUDEPATH += /usr/local/include \ /usr/local/include/opencv \ /usr/local/include/opencv2LIBS += /usr/local/lib/libopencv_highgui.so \ /usr/local/lib/libopencv_core.so \ /usr/local/lib/libopencv_imgproc.so \ /usr/local/lib/libopencv_imgcodecs.so \ /usr/local/lib/libopencv_ml.so
第二步:建立cpp文件
#include "opencv2/opencv.hpp"#include "opencv2/imgproc.hpp"#include "opencv2/highgui.hpp"#include "opencv2/ml.hpp"using namespace cv;using namespace cv::ml;int main(int, char**){ int width = 512, height = 512; Mat image = Mat::zeros(height, width, CV_8UC3); //创建窗口可视化 // 设置训练数据 int labels[10] = { 1, -1, 1, 1,-1,1,-1,1,-1,-1 }; Mat labelsMat(10, 1, CV_32SC1, labels); float trainingData[10][2] = { { 501, 150 }, { 255, 10 }, { 501, 255 }, { 10, 501 }, { 25, 80 }, { 150, 300 }, { 77, 200 } , { 300, 300 } , { 45, 250 } , { 200, 200 } }; Mat trainingDataMat(10, 2, CV_32FC1, trainingData); // 创建分类器并设置参数 Ptr<SVM> model =SVM::create(); model->setType(SVM::C_SVC); model->setKernel(SVM::LINEAR); //核函数 //设置训练数据 Ptr<TrainData> tData =TrainData::create(trainingDataMat, ROW_SAMPLE, labelsMat); // 训练分类器 model->train(tData); Vec3b green(0, 255, 0), blue(255, 0, 0); // Show the decision regions given by the SVM for (int i = 0; i < image.rows; ++i) for (int j = 0; j < image.cols; ++j) { Mat sampleMat = (Mat_<float>(1, 2) << j, i); //生成测试数据 float response = model->predict(sampleMat); //进行预测,返回1或-1 if (response == 1) image.at<Vec3b>(i, j) = green; else if (response == -1) image.at<Vec3b>(i, j) = blue; } // 显示训练数据 int thickness = -1; int lineType = 8; Scalar c1 = Scalar::all(0); //标记为1的显示成黑点 Scalar c2 = Scalar::all(255); //标记成-1的显示成白点 //绘图时,先宽后高,对应先列后行 for (int i = 0; i < labelsMat.rows; i++) { const float* v = trainingDataMat.ptr<float>(i); //取出每行的头指针 Point pt = Point((int)v[0], (int)v[1]); if (labels[i] == 1) circle(image, pt, 5, c1, thickness, lineType); else circle(image, pt, 5, c2, thickness, lineType); } imshow("SVM Simple Example", image); waitKey(0);}
第三步:运行程序,出现的结果:
0 0
- 基于qt和opencv3实现机器学习之:利用svm(支持向量机)分类
- 机器学习之-利用svm(支持向量机)分类(opencv3)
- 基于qt和opencv3实现机器学习之:利用正态贝叶斯分类
- 基于qt和opencv3实现机器学习之:利用逻辑斯谛回归(logistic regression)分类
- 基于qt和opencv3实现机器学习之:利用最近邻算法(knn)实现手写数字分类
- 基于qt和opencv3实现机器学习之:对OCR进行分类
- 机器学习之支持向量机(svm)
- 机器学习之支持向量机(SVM)
- 机器学习之支持向量机SVM
- 基于qt和opencv3实现机器学习之:kmeans
- 【机器学习】推导支持向量机SVM二分类
- 机器学习分类篇-支持向量机SVM上
- 基于支持向量机SVM的文本分类的实现
- 机器学习博客整理---支持向量机(SVM)实现
- 机器学习之支持向量机(SVM)
- 深入浅出机器学习之支持向量机SVM(SMO算法)
- 机器学习之支持向量机: Support Vector Machines (SVM)
- Spark机器学习系列之13: 支持向量机SVM
- 实例分析 JavaScript 词法作用域
- LeetCode 561. Array Partition I
- 【01背包】洛谷 P2677 超级书架 2
- hdu1048 The Hardest Problem Ever
- apache的部署学习
- 基于qt和opencv3实现机器学习之:利用svm(支持向量机)分类
- OpenWrt路由器macvlan单线多拨的方法
- 二分贪心 E 找距离最大的最小值
- .Net 框架-----程序集的组成部分
- 命令模式
- 【矩阵快速幂】经典题 hdu2157 how many ways、woj642 Lost In WHU
- Bitmap排序
- 【学习java编程思想】day_1面向对象程序设计的方法
- Android学习之路(5)——数据存储方式