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.csdn.net/CUSTESC/article/details/60882425
https://blog.csdn.net/jiangli198867/article/details/79277612
https://www.cnblogs.com/br170525/p/9236479.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OpenCV中的SVM(支持向量机)是一种机器学习算法,用于分类和回归问题。SVM通过将训练数据映射到高维空间,并在该空间中找到一个最优超平面来分离不同的类别。它可以在不同的核函数(如线性核、多项式核和高斯核)下工作,并且可以根据数据的特性和问题的要求进行设置。 在OpenCV中,使用SVM的步骤如下: 1. 创建一个分类器对象:使用cv::ml::SVM::create()函数创建一个SVM分类器对象。 2. 设置相关参数:通过svm->setType()设置分类器类型,svm->setKernel()设置核函数类型,并使用其他函数设置其他参数,如svm->setGamma()、svm->setC()、svm->setTermCriteria()等。 3. 获取数据集:创建训练数据集,使用cv::ml::TrainData::create()函数将数据和标签传递给训练数据对象。 4. 训练模型:使用svm->train()函数训练分类器,传入训练数据集。 5. 预测:使用svm->predict()函数对测试数据进行预测,返回预测结果。 6. 保存和加载模型:使用svm->save()函数将模型保存为xml文件,使用cv::ml::SVM::load()函数加载保存的模型。 此外,还可以使用cv::ml::SVM::trainAuto()函数来自动选择最优参数进行训练,该函数会尝试不同的参数组合,并选择效果最好的参数。 希望以上信息能够对你有所帮助。如果还有其他问题,请随时提问。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [OpenCV(一)---支持向量机 SVM](https://blog.csdn.net/qq_42995327/article/details/114462958)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值