目录
一、代码示例
- 一、代码示例
- 二、SVM训练过程
- 2.1 数据准备
- 2.2 初始化SVM参数
- 2.3 训练SVM
- 2.4 保存数据
- 2.5 加载保存的数据
- 2.6 测试数据
- 三、显示支持向量机分类区域
- 3.1 初始化图像显示区域
- 3.2 显示SVM决策区域
- 3.3 显示训练数据
- 3.4 显示支持向量
- 四、输出结果
话不多说,直接上代码:
#include
#include
#include
using namespace std;
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[4] = { 1, -1, -1, -1 };
float trainingData[4][2] = { {501, 10}, {255, 10}, {501, 255}, {10, 501} };
Mat trainingDataMat(4, 2, CV_32FC1, trainingData);
Mat labelsMat(4, 1, CV_32SC1, labels);
//训练SVM
Ptr svm = SVM::create();//创建一个svm对象
svm->setType(SVM::C_SVC); //设置SVM公式类型
svm->setKernel(SVM::LINEAR);//设置SVM核函数类型
svm->setTermCriteria(TermCriteria(TermCriteria::MAX_ITER, 100, 1e-6));//设置SVM训练时迭代终止条件
svm->train(trainingDataMat, ROW_SAMPLE, labelsMat);//训练数据
//显示SVM的决策区域
Vec3b green(0, 255, 0), blue(255, 0, 0);
for (int i = 0; i setKernel(SVM::LINEAR); ——设置SVM核函数类型,包括CUSTOM、LINEAR、POLY、RBF、SIGMOID、CHI2、INTER,默认值为RBF; 非线性分类中常见的核函数包括:齐次多项式、非齐次多项式、双曲正切、高斯核(Gaussiankernel)、线性核、径向基函数(radialbasis function, RBF)核和、Sigmoid核。
svm->setTermCriteria(TermCriteria(TermCriteria::MAX_ITER, 100, 1e-6)); ——设置SVM训练时迭代终止条件,默认值是cv::TermCriteria(cv::TermCriteria::MAX_ITER + TermCriteria::EPS,1000, FLT_EPSILON);
2.3 训练SVM
程序如下:
svm->train(trainingDataMat, ROW_SAMPLE, labelsMat);//训练数据
2.4 保存数据
当遇到较大数据量时,一般需要将数据保存为xml文件,以便在其他程序中得到调用。程序如下:
//保存模型
svm->save("svm.xml");
2.5 加载保存的数据
当需要加载2.4中保存的xml文件时,代码为:
Ptr svm = SVM::load("svm.xml");//加载svm对象
2.6 测试数据
测试数据代码如下:
int response = (int)svm->predict(p);
其中,p为CV_32FC1类型数据,response输出SVM预测的数据类型。
三、显示支持向量机分类区域
本例中,由于数据量较小,因此我们可以显示SVM的决策区域,以便更好地了解SVM算法的实现过程。主要步骤如下:
3.1 初始化图像显示区域
//视觉表示的数据
int width = 512, height = 512;
Mat image = Mat::zeros(height, width, CV_8UC3);
将图像显示区域设置为512*512像素大小。
3.2 显示SVM决策区域
//显示SVM的决策区域
Vec3b green(0, 255, 0), blue(255, 0, 0);
for (int i = 0; i
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?