opencv svm使用总结

第一次需要使用opencv 来实现svm分类,记录一下大体的流程。

//---------- 头文件
#include <iostream>
#include <opencv2/core.hpp>
#include <opencv2/imgproc.hpp>
#include "opencv2/imgcodecs.hpp"
#include <opencv2/highgui.hpp>
#include <opencv2/ml.hpp>               //ml模块

using namespace cv;
using namespace cv::ml;                //ml命名空间
using namespace std;

//---------- 1. 随机生成训练数据(二维数据,超平面为二维) ---
    Mat trainData(2 * NTRAINING_SAMPLES, 2, CV_32FC1);            
    Mat labels(2 * NTRAINING_SAMPLES, 1, CV_32SC1);                       
    
//------------------ 2. 设置支持向量机范围 -------------
    Ptr<SVM> svm = SVM::create();   //声明SVM对象
    svm->setType(SVM::C_SVC);   //SVM模型选择                   
    svm->setC(0.2);             //惩罚因子设置(原始0.1)           
    svm->setKernel(SVM::LINEAR);   //核函数类型:线性                
    svm->setTermCriteria(TermCriteria(TermCriteria::MAX_ITER, (int)1e7, 1e-6));        //迭代要求         

//------------------- 3. 训练SVM -------------------------
    svm->train(trainData, ROW_SAMPLE, labels);           //训练         

//-------------------4.保存训练器
    svm->save("mnist_svm.xml"); 

//-------------------5.导入训练器
//Ptr<SVM> svm1 = StatModel::load<SVM>("mnist_dataset/mnist_svm.xml");

//-------------------6.预测
cv::Mat sampleMat = (cv::Mat_<float>(1, 2) << j,i);
float fRespone = svm->predict(sampleMat); 

fRespone  ---> 分类结果

关于ROW_SAMPLE,见ml.hpp中的定义(添加注释)

enum SampleTypes
{
//每一行为一个样本数据
ROW_SAMPLE = 0, //!< each training sample is a row of samples
//每一列为一个样本数据
COL_SAMPLE = 1 //!< each training sample occupies a column of samples
};


# find required opencv
find_package(OpenCV REQUIRED)
# directory of opencv headers
include_directories(${OpenCV_INCLUDE_DIRS})
# name of executable file and path of source file
add_executable(opencv_test src/opencv_test.cpp)
# directory of opencv library
link_directories(${OpenCV_LIBRARY_DIRS})
# opencv libraries
target_link_libraries(opencv_test ${OpenCV_LIBS})

reference:
https://blog.youkuaiyun.com/CUSTESC/article/details/60882425
https://blog.youkuaiyun.com/jiangli198867/article/details/79277612
https://www.cnblogs.com/br170525/p/9236479.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值