精华内容
下载资源
问答
  • c++ svm
    2019-11-23 16:20:26

    c++ 初学者 + opencv初学者 写了一个简单的svm分类器,由于有很多不是很了解,所以代码注释得比较详细

    svm

    直接上代码吧 大家将就看

    #include "pch.h"
    #include <iostream>
    #include <opencv.hpp>
    using namespace cv;
    using namespace cv::ml; //svm包含在ml里面
    
    int main()
    {
    	int  width = 512, height = 512;
    	Mat image = Mat::zeros(height, width, CV_8UC3);
    	//CV_8UC3 无符号整型数据 3通道占用8位
    
    	int label[10] = { 1,1,1,1,1,-1,-1,-1,-1,-1 };
    	Mat labelsmat(10, 1, CV_32SC1, label);
    	//CV_32SC1 有符号整型,占用空间32位,单通道
    
    	float trainingDate[10][2] = { {500,20},{280,500},{300,460},{400,450},{450,400},{20,300},{100,200},{150,100},{200,50},{180,10} };
    	Mat trainingDateMat(10, 2, CV_32FC1, trainingDate);
    	//CV_32FC1 float类型,32位,单通道
    
    	Ptr<SVM> svm = SVM::create();
    	svm->setType(SVM::C_SVC); //设置分类器类型
    	svm->setKernel(SVM::LINEAR); //设置核函数
    	Ptr<TrainData> tData = TrainData::create(trainingDateMat, ROW_SAMPLE, labelsmat); //第一个为
    	svm->train(tData);
    
    	Vec3b green(0, 255, 0), red(255, 0, 0); 
    	//vec3b vector 3 通道 uchar类型
    
    	//每一个像素依次进行判断,利用已经训练好的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); //因为进行预测的类型必须是mat 所以要先进行转换
    			float response = svm->predict(sampleMat); //预测
    			if (response == 1) //对结果进行分类
    			{
    				image.at<Vec3b>(i, j) = green;
    			}
    			else if (response == -1)
    			{
    				image.at<Vec3b>(i, j) == red;
    			}
    		}
    	}
    
    	Scalar c1 = Scalar::all(0);//全白
    	Scalar c2 = Scalar::all(255); //全黑 或者反过来
    	for (int i = 0; i < labelsmat.rows; i++) //一个一个显示
    	{
    		const float *v = trainingDateMat.ptr<float>(i); //把训练数据的指针头拿出来
    		Point pt = Point((int)v[0], (int)v[1]); //把训练数据放进点类中
    		if (label[i] == 1) //判断
    		{
    			circle(image, pt, 5, c1, -1, 8);
    		}
    		else
    		{
    			circle(image, pt, 5, c2, -1, 8);
    		}
    	}
    	imshow("SVM分类", image);
    	waitKey(0);
    }
    
    
    更多相关内容
  • svm_C++_SVM_

    2021-10-03 10:01:43
    此代码是用C写的,用于进行支持向量机(SVM)的训练代码的C文件格式。
  • SVM.rar_C++SVM_SVM_svm c++

    2022-09-22 19:34:40
    SVM usful totorial C-C++
  • svm算法源代码,对数据挖掘等都很有用的
  • opencv C++ SVM模型训练与分类实现

    千次阅读 2022-06-13 14:07:58
    我用的是opencv 4.5.1版本,...最近想学习一下分类算法的内容,恰好opencv有SVM的函数,故先从这个下手。找了许多资料,发现要么是opencv2、3的,要么就没有具体实现代码,学习还是把代码与原理一起结合来看比较好。...

    最近想学习一下分类算法的内容,恰好opencv有SVM的函数,故先从这个下手。找了许多资料,发现要么是opencv2、3的,要么就没有具体实现代码,学习还是把代码与原理一起结合来看比较好。

    其中,我主要参考的是这一篇文章:

    学习SVM(一) SVM模型训练与分类的OpenCV实现icon-default.png?t=M4ADhttps://blog.csdn.net/chaipp0607/article/details/68067098写得非常好!但是是2017年发布的文章,其中许多内容都做了更新,我用的是opencv 4.5.1版本,win10系统,vs2019作开发工具。具体opencv配置不说了,我对上面那篇文章的代码进行了更新。

    步骤一样.

    一、数据准备

    首先找到opencv库自带的digits图片,我的电脑上路径在:D:\app\opencv4.5.1\opencv\opencv\sources\samples\data\digits.png

    然后在D盘建立如下文件夹:

    只需新建命名就好了,不用往里面放东西。接下来建立vs2019项目工程,新建源文件

    复制如下代码:

    #include <windows.h>
    #include <iostream>
    #include <opencv2/core/core.hpp>
    #include <opencv2/highgui/highgui.hpp>
    #include <opencv2/imgproc/imgproc.hpp>
    #include <opencv2/core/utils/logger.hpp>
    #include <thread>
    #include <time.h>
    //#include <stdio.h>
    #include <string.h>
    
    
    using namespace std;
    using namespace cv;
    
    int main()
    {
    	char ad[128] = { 0 };
    	int  filename = 0, filenum = 0;
    	Mat img = imread("digits.png");
    	Mat gray;
    	cvtColor(img, gray, COLOR_BGR2GRAY);
    	int b = 20;
    	int m = gray.rows / b;   //原图为1000*2000
    	int n = gray.cols / b;   //裁剪为5000个20*20的小图块
    
    	for (int i = 0; i < m; i++)
    	{
    		int offsetRow = i * b;  //行上的偏移量
    		if (i % 5 == 0 && i != 0)
    		{
    			filename++;
    			filenum = 0;
    		}
    		for (int j = 0; j < n; j++)
    		{
    			int offsetCol = j * b; //列上的偏移量
    			sprintf_s(ad, "D:\\data\\%d\\%d.jpg", filename, filenum++);
    			//截取20*20的小块
    			Mat tmp;
    			gray(Range(offsetRow, offsetRow + b), Range(offsetCol, offsetCol + b)).copyTo(tmp);
    			imwrite(ad, tmp);
    		}
    	}
    	return 0;
    
    
    }
    
    

     运行结束后,在刚刚新建的文件夹中,0、1文件夹内各有500张分割好的图片。

    最后在test_image、train_image分别新建0、1文件夹。

    把data\0中的0-399复制到data\test_image\0,399-499复制到data\train_image\0;

    把data\1中的0-399复制到data\test_image\1,399-499复制到data\train_image\1。第一步完成。

    --D:
      --data
        --0
        --1
        --train_image
          --0(400张)
          --1(400张)
        --test_image
          --0(100张)
          --1(100张)
    

     二、模型训练

     再新建一个源文件:SVM模型训练.cpp,将第一步的SVM数据准备文件从项目中移除。

    复制上如下代码,其中最主要的就是opencv4中的SVM函数改变很大,配置参数上与原文完全不同

    #include <stdio.h>  
    #include <time.h>  
    #include <opencv2/opencv.hpp>  
    
    #include <iostream> 
    #include <opencv2/core/core.hpp>
    #include <opencv2/highgui/highgui.hpp>
    #include <opencv2/imgproc/imgproc.hpp>
    #include "opencv2/imgcodecs.hpp"
    #include <opencv2/core/utils/logger.hpp>
    #include <opencv2/ml/ml.hpp>  
    #include <io.h>
    
    using namespace std;
    using namespace cv;
    using namespace cv::ml;
    
    void getFiles(string path, vector<string>& files);
    void get_1(Mat& trainingImages, vector<int>& trainingLabels);
    void get_0(Mat& trainingImages, vector<int>& trainingLabels);
    
    int main()
    {
    	//获取训练数据
    	Mat classes;
    	Mat trainingData;
    	Mat trainingImages;
    	vector<int> trainingLabels;
    	get_1(trainingImages, trainingLabels);
    	//waitKey(2000);
    	get_0(trainingImages, trainingLabels);
    	Mat(trainingImages).copyTo(trainingData);
    	trainingData.convertTo(trainingData, CV_32FC1);
    	Mat(trainingLabels).copyTo(classes);
    	//配置SVM训练器参数
    	Ptr<SVM> svm = SVM::create();
    	svm->setType(SVM::C_SVC);
    	svm->setKernel(SVM::LINEAR);
    	svm->setDegree(0);
    	svm->setGamma(1);
    	svm->setCoef0(0);
    	svm->setC(1);
    	svm->setNu(0);
    	svm->setP(0);
    	svm->setTermCriteria(TermCriteria(TermCriteria::MAX_ITER, 1000, 0.01));
    	//训练
    	svm->train(trainingData, ROW_SAMPLE, classes );
    	//保存模型
    	svm->save("svm.xml");
    	
    	cout << "训练好了!!!" << endl;
    
    	getchar();
    	return 0;
    }
    void getFiles(string path, vector<string>& files)
    {
    	long long  hFile = 0;
    	struct _finddata_t fileinfo;
    	string p;
    	if ((hFile = _findfirst(p.assign(path).append("\\*").c_str(), &fileinfo)) != -1)
    	{
    		do
    		{
    			if ((fileinfo.attrib & _A_SUBDIR))
    			{
    				if (strcmp(fileinfo.name, ".") != 0 && strcmp(fileinfo.name, "..") != 0)
    					getFiles(p.assign(path).append("\\").append(fileinfo.name), files);
    			}
    			else
    			{
    				files.push_back(p.assign(path).append("\\").append(fileinfo.name));
    			}
    		} while (_findnext(hFile, &fileinfo) == 0);
    
    		_findclose(hFile);
    	}
    }
    
    void get_1(Mat& trainingImages, vector<int>& trainingLabels)
    {
    	string filePath = "D:\\data\\train_image\\1";
    	cout << "获取D:\\data\\1" << endl;
    	vector<string> files;
    	getFiles(filePath, files);
    	int number = files.size();
    	for (int i = 0; i < number; i++)
    	{
    		Mat  SrcImage = imread(files[i].c_str());
    		SrcImage = SrcImage.reshape(1, 1);
    		trainingImages.push_back(SrcImage);
    		trainingLabels.push_back(1);
    	}
    }
    void get_0(Mat& trainingImages, vector<int>& trainingLabels)
    {
    	string filePath = "D:\\data\\train_image\\0";
    	cout << "获取D:\\data\\0" << endl;
    	vector<string> files;
    	getFiles(filePath, files);
    	int number = files.size();
    	for (int i = 0; i < number; i++)
    	{
    		Mat  SrcImage = imread(files[i].c_str());
    		SrcImage = SrcImage.reshape(1, 1);
    		trainingImages.push_back(SrcImage);
    		
    		trainingLabels.push_back(0);
    	}
    }
    

     训练完毕后,在这个解决方案文件夹下就生成了一个.xml文件,即是我们训练出来的模型。

    训练时还可以选择自动训练,会自己寻找最优参数,效果也很好。

    //训练
    	svm->trainAuto(trainingData, ROW_SAMPLE, classes );

    三、加载模型实现分类

    同样的,新建一个源文件:

    复制如下代码:

    #include <stdio.h>  
    #include <time.h>  
    #include <opencv2/opencv.hpp>  
    
    #include <iostream> 
    #include <opencv2/core/core.hpp>
    #include <opencv2/highgui/highgui.hpp>
    #include <opencv2/imgproc/imgproc.hpp>
    #include "opencv2/imgcodecs.hpp"
    #include <opencv2/core/utils/logger.hpp>
    #include <opencv2/ml/ml.hpp>  
    #include <io.h>
    
    using namespace std;
    using namespace cv;
    using namespace cv::ml;
    
    void getFiles(string path, vector<string>& files);
    int main()
    {
    	int result = 0;
    	string filePath = "D:\\data\\test_image\\1";
    	vector<string> files;
    	getFiles(filePath, files);
    	int number = files.size();
    	cout << number << endl;
    	string modelpath = "svm.xml";
    	cv::Ptr<cv::ml::SVM> svm;
    	svm = cv::Algorithm::load<cv::ml::SVM>(modelpath);
    
    
    	/*CvSVM svm;
    	svm.clear();
    	string modelpath = "svm.xml";
    	FileStorage svm_fs(modelpath, FileStorage::READ);
    	if (svm_fs.isOpened())
    	{
    		svm.load(modelpath.c_str());
    	}*/
    	for (int i = 0; i < number; i++)
    	{
    		Mat inMat = imread(files[i].c_str());
    		Mat p = inMat.reshape(1, 1);
    		p.convertTo(p, CV_32FC1);
    		int response = (int)svm->predict(p);
    		if (response == 1)//要预测1,如果用0来做测试集就改成response == 0
    		{
    			result++;
    		}
    		else
    		{
    			cout << files[i] << endl;
    		}
    	}
    	cout << result << endl;
    	getchar();
    	return  0;
    }
    void getFiles(string path, vector<string>& files)
    {
    	long long   hFile = 0;
    	struct _finddata_t fileinfo;
    	string p;
    	if ((hFile = _findfirst(p.assign(path).append("\\*").c_str(), &fileinfo)) != -1)
    	{
    		do
    		{
    			if ((fileinfo.attrib & _A_SUBDIR))
    			{
    				if (strcmp(fileinfo.name, ".") != 0 && strcmp(fileinfo.name, "..") != 0)
    					getFiles(p.assign(path).append("\\").append(fileinfo.name), files);
    			}
    			else
    			{
    				files.push_back(p.assign(path).append("\\").append(fileinfo.name));
    			}
    		} while (_findnext(hFile, &fileinfo) == 0);
    		_findclose(hFile);
    	}
    }
    

     如果想要检测0的分类准确率就让第46行的response == 0。

     可以看到,100张1有99张被识别出来,有一张452没有识别成功。100张0都识别出来了。

    展开全文
  • 基于C++,OpenCV3以及SVM的MNIST手写数字识别,亲测可运行,关于详细内容可参考博客:https://blog.csdn.net/didi_ya/article/details/114572209
  • 支持向量机的预测源代码,平台为C++,用于分类和回归问题
  • 基于SVM与人工神经网络的车牌识别算法,使用了OpenCV的图像处理函数,在VS2013 + OpenCV 2.4.9平台上实现
  • SVM C++

    2021-08-04 20:32:04
    SVM 学习使用 libsvm 库。详细说明见这里。 使用工具训练 库中有编写好的训练程序 svm_train 可以按照要求的数据格式训练模型。训练数据格式: <label> <index1>:<value1> <index2>:<...

    SVM

    学习使用 libsvm 库。详细说明见这里

    使用工具训练

    库中有编写好的训练程序 svm_train 可以按照要求的数据格式训练模型。训练数据格式:

    <label> <index1>:<value1> <index2>:<value2> ...
    .
    .
    .
    

    每一行是一个训练数据,结尾由 '\n' 分开。对于 <label>,如果是一个整数,那么为分类(支持多个类训练)。如果是实数,那么是回归。

    <index>:<value>代表第 index 处特征值为 value。index 从 1 开始递增,自定义的核函数除外。若使用自定义核函数:

    # sample i; training
    <label> 0:i 1:K(xi, x1) ... L:K(xi, xL)
    
    # testing; ? can be any value
    <label> 0:? 1:K(x, x1) ... L:K(x, xL)
    

    使用库编程

    所有的函数都在 svm.h 中声明。训练模型函数

    struct svm_model *svm_train(const struct svm_problem *prob,
    						const struct svm_parameter *param);
    

    需要定义 svm_problemsvm_parameter

    struct svm_problem
    {
        int l; // number of samples
        double *y; // pointer to labels
        struct svm_node **x; // pointer to all data samples
    };
    

    比如,

     LABEL    ATTR1    ATTR2    ATTR3    ATTR4    ATTR5
     -----    -----    -----    -----    -----    -----
     1        0        0.1      0.2      0        0
     2        0        0.1      0.3     -1.2      0
     1        0.4      0        0        0        0
     2        0        0.1      0        1.4      0.5
     3       -0.1     -0.2      0.1      1.1      0.1
    

    那么结构为

    l = 5
    
    y -> 1 2 1 2 3
    
    x -> [ ] -> (2,0.1) (3,0.2) (-1,?)
        [ ] -> (2,0.1) (3,0.3) (4,-1.2) (-1,?)
        [ ] -> (1,0.4) (-1,?)
        [ ] -> (2,0.1) (4,1.4) (5,0.5) (-1,?)
        [ ] -> (1,-0.1) (2,-0.2) (3,0.1) (4,1.1) (5,0.1) (-1,?)
    

    (index, value) 存储在 svm_node 结构中

    struct svm_node
    {
        int index;
        double value;
    };
    

    index = -1 代表每个数据点结尾。

    svm_problem 定义可见头文件,参数解释见文档和 libsvm 上的调参手册。库中还提供了诸如 svm_XXX 函数辅助调用分析训练的 SVM 模型,多加利用。

    展开全文
  • SVM训练(C++实现)

    2022-05-29 16:24:35
    在很多文献中,都把HOG和SVM结合起来使用,可以得到很不错的分类效果,SVM就不用再复习啦,就是一个线性分类器,给一个简单的图就能很好理解, 对于有标签的正样本和负样本,如果只有两个维度,也就是只有两个特征,...

    在很多文献中,都把HOG和SVM结合起来使用,可以得到很不错的分类效果,SVM就不用再复习啦,就是一个线性分类器,给一个简单的图就能很好理解,

    对于有标签的正样本和负样本,如果只有两个维度,也就是只有两个特征,要做的就是找到一条线,能够很好的划分为两个区域分别包含正负样本,并且这条线尽可能远离两个样本中心
    在这里插入图片描述
    (摘自上课的PPT)

    但是这是针对二维的情况,如果扩展到多维,可能就无法找到一条线,即使找到了也可能有很多样本发生了错分,所以就需要在更高维度上考虑,高斯是最常用的。

    目前我是打算将23维图像降为1维,空间信息损失实在太多啦,但是也想看看效果,就跑了跑。


    一、代码及解释

    	//使用SVM分类器训练  
        //设置参数的方式1
        Ptr<SVM> svm = SVM::create();
        svm->setKernel(SVM::RBF);
        svm->setType(SVM::C_SVC);
        svm->setC(10);
        svm->setCoef0(1.0);
        svm->setP(1.0);
        svm->setNu(0.5);
        svm->setTermCriteria(TermCriteria(CV_TERMCRIT_EPS, 1000, FLT_EPSILON));
    
        //使用SVM学习     
        //    
        svm->train(featureVectorOfSample, ROW_SAMPLE, classOfSample);
    
        //保存分类器
        svm->save("Classifier.xml");
    
        cout<<"//-------------开始训练-------//" <<endl;
        clock_t start, end;
        start = clock();
    
        //使用SVM分类器训练
        //设置参数,注意Ptr的使用
        cv::Ptr<cv::ml::SVM> svm = cv::ml::SVM::create();
        svm->setType(cv::ml::SVM::C_SVC);
        svm->setKernel(cv::ml::SVM::LINEAR);//注意必须使用线性SVM进行训练,因为HogDescriptor检测函数只支持线性检测!!!
        svm->setTermCriteria(TermCriteria(TermCriteria::MAX_ITER, 10, FLT_EPSILON)); //迭代终止条件
    
        //使用SVM学习
        svm->train(samFeatureMat,cv::ml::ROW_SAMPLE, samLabelMat);
    
        //保存分类器(里面包括了SVM的参数,支持向量,α和rho)
        svm->save("Classifier.xml");
        end = clock();
        cout << "The obtain hog feature run time is :" << (double)(end - start) / CLOCKS_PER_SEC << "s" << endl;
    
        /*
        SVM训练完成后得到的XML文件里面,有一个数组,叫做support vector,还有一个数组,叫做alpha,有一个浮点数,叫做rho;
        将alpha矩阵同support vector相乘,注意,alpha*supportVector,将得到一个行向量,将该向量前面乘以-1。之后,再该行向量的最后添加一个元素rho。
        如此,变得到了一个分类器,利用该分类器,直接替换opencv中行人检测默认的那个分类器(cv::HOGDescriptor::setSVMDetector()),
        */
        //获取支持向量机:矩阵默认是CV_32F
        Mat supportVector = svm->getSupportVectors();//
    
        //获取alpha和rho
        Mat alpha;//每个支持向量对应的参数α(拉格朗日乘子),默认alpha是float64的
        Mat svIndex;//支持向量所在的索引
        float rho = svm->getDecisionFunction(0, alpha, svIndex);
    
        //转换类型:这里一定要注意,需要转换为32的
        Mat alpha2;
        alpha.convertTo(alpha2, CV_32FC1);
    
        //结果矩阵,两个矩阵相乘
        Mat result(1, 3780, CV_32FC1);
        result = alpha2*supportVector;
    
        //乘以-1,这里为什么会乘以-1?
        //注意因为svm.predict使用的是alpha*sv*another-rho,如果为负的话则认为是正样本,在HOG的检测函数中,使用rho+alpha*sv*another(another为-1)
        for (int i = 0; i < 3780; ++i)
        result.at<float>(0, i) *= -1;
    
        //将分类器保存到文件,便于HOG识别
        //这个才是真正的判别函数的参数(ω),HOG可以直接使用该参数进行识别
        FILE *fp = fopen("HOG_SVM.txt", "wb");
        for (int i = 0; i<3780; i++)
        {
         fprintf(fp, "%f \n", result.at<float>(0,i));
        }
        fprintf(fp, "%f", rho);
        fclose(fp);
    
        cout <<"真正参数得到啦"<< endl;
    

    二、总结

    如果要使用SVM进行训练的话,可能需要GPU,又或者是我维度太高了,想要二分类比较困难,这还是一个问题,等后面来解决!

    展开全文
  • C++实现SVM 算法

    千次阅读 2019-06-24 21:55:48
    SVM解释:一、SVM的整体框架 SVM解释:二、SVM的数学基础 SVM解释:三、线性可分的情况 SVM解释:四、线性不可分的情况 SVM解释:五、SMO算法 (二)实现流程 捋一遍数学推导后准备着手实现,但发现数学推导...
  • C++ opencv SVM

    2020-07-29 22:39:48
    C++ SVM #include "stdafx.h" #include <iostream> #include <opencv.hpp> using namespace cv; using namespace cv::ml; //svm包含在ml里面 int main() { int width = 512, height = 512; Mat ...
  • 很通俗的来说,haar算法计算特征就是用一块区域内黑色的值减去白色的值。但是一张图片像素点是非常多的,如果用普通的方法去计算一块区域的值,效率相当低下。 这里有一种加速计算的方法--积分图: ...
  • svm.train(trainData, labels, Mat(), Mat(), params ); cout " Finished training process " endl; /* 4. 显示划分区域 */ Vec3b green( 0 , 100 , 0 ), blue ( 100 , 0 , 0 ); for ( int i = ...
  • 原理上,SVM使用非线性特征映射将低维特征映射到高维,,并通过kernel trick直接计算高维特征之间的内积,避免显式计算非线性特征映射,然后在高维特征空间中做线性分类。用表示非线性映射,它对应的核函数是,使得...
  • SVMC++中的源文件

    2018-07-11 15:50:18
    SVMC++中的源文件SVMC++中的源文件SVMC++中的源文件
  • OpenCV 2.4+ C++ SVM介绍

    2015-11-27 11:06:12
    1995年Cortes和Vapnik于首先提出SVM,它在解决小样本、非线性及高维模式识别中表现出许多特有的优势,并能够推广应用到函数拟合等其他机器学习问题中。   使用SVM #include #include #...
  • 目录1、数据准备2、训练集和测试集划分3、SVM模型训练3.1 数据准备3.2 特征选取3.3 配置SVM训练器参数3.4 保存模型4、加载模型实现分类 1、数据准备 在OpenCV的安装路径下,搜索digits.png,可以得到一张图片,图片...
  • C++实现SVM分类算法

    热门讨论 2011-10-18 18:13:18
    SVM有如下特征:(1)SVM学习问题可以表示为凸优化问题,因此可以利用已知的有效算法发现目标函数...本代码通过C++实现SVM的分类算法,并通过SSE实现最优解的快速计算,学习SVM的同学可以参考一下,如有不足,请指正。
  • 一个SVM分类简单的源程序,可以自行设置参数。
  • SVM分类器的实现原码,SVM是一类基于统计学习理论的模式识别方法
  • OpenCV 2.4+ C++ SVM文字识别 《OpenCV 2.4+ C++ SVM文字识别》,作者:Justany_WhiteSnow,原文链接:http://www.cnblogs.com/justany/archive/2012/11/27/2789767...
  • SVM C++ 实现

    千次阅读 多人点赞 2018-01-23 18:56:40
    去年的时候,使用过 C++ 版本的SVM 实现过基于无人机的道路检测,但是当时,对博大精深的 SVM 只是了解皮毛。最近,对 SVM 的基本公式及相关变体的公式,重新推导了一遍,并且分别用 Python 和 C++ 实现了一遍。此文...
  • 支持向量机svm也是一种机器学习算法,采用空间超平面进行数据分割,在这篇博客中我们将使用svm进行手写数字的识别,使用该算法,识别率可以达到100%。 环境准备: vs2015 OpenCV4.5.0 下面的代码为svm模型训练代码:...
  • 一篇理论介绍非常全面的SVM文档。训练算法的介绍方面尤其详细
  • hog svm图像检测--VS2017(C++)

    千次阅读 2022-04-14 10:30:17
    利用C++实现hog svm图像检测
  • 本程序有三个cpp文件,main.cpp为测试文件;prepare.cpp为预处理文件;train_SVMSVM的训练文件。详情可参考博客:https://blog.csdn.net/didi_ya/article/details/114362904
  • 基于SVM与人工神经网络的车牌识别算法,使用了OpenCV的图像处理函数,在VS2013 + OpenCV 2.4.9平台上实现
  • SVMC++实现

    千次阅读 2019-08-03 20:50:51
    用python实现SVM可以调用很多的包,所以对于SVM的内部实现很多都忽略了,但是用C++来实现SVM就要对SVM有足够的了解,如果希望更加理解SVM,我觉得用C++来实现一下SVM是一个很好的方法。 SVM的原理这里就不多解释了,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,583
精华内容 4,233
关键字:

c++ svm