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);
}

opencv c++ svm分类器 初学相关推荐

  1. 机器学习分类器——案例(opencv sklearn svm ann)

    机器学习分类器--案例(opencv sklearn svm ann python) ps:最近师姐给我们留了一个任务,记录一下从一开始的什么都不懂到现在把任务做出来,并从中学习到的东西吧.... 语 ...

  2. opencv 使用SVM+HOG训练行人检测分类器(INRIA Person Dataset训练集)

    目录 1.训练过程(即代码流程) 2.模型及结果优缺点分析 3.模型建立中发现的问题及改进方法 4.行人检测OpenCv 代码(C++) 1.训练过程(即代码流程) 1. 准备训练样本集合: 包括正样 ...

  3. OpenCV中使用SVM分类器

    在opencv中支持SVM分类器,过程就是:先训练再预测(python实现) # svm 对于数据的要求: 所有的数据都要有label # [155,48] -- 0 女生 [152,53] ---1 ...

  4. 使用Opencv中的SVM分类器进行图像分类

    SVM的原理 SVM也叫支持向量机,最大间隔分类器.在分类.回归方面普遍出现. 我们在这里考虑使用二维空间来表示一系列数据,每个数据都有它自身的(x,y),然后用一条直线将其进行分类.这应该就是最简单 ...

  5. 利用Hog特征和SVM分类器进行行人检测

    1.HOG特征: 方向梯度直方图(Histogram of Oriented Gradient, HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子.它通过计算和统计图像局部区域的 ...

  6. OpenCV支持向量机SVM用于非线性可分离数据

    OpenCV支持向量机SVM用于非线性可分离数据 支持向量机SVM用于非线性可分离数据 目标 动机Motivation 优化问题的扩展 源代码 解释 设置训练数据 设置SVM的参数 训练SVM 显示决 ...

  7. OpenCV支持向量机SVM简介

    OpenCV支持向量机SVM简介 支持向量机SVM简介 目标 什么是SVM? 最佳超平面如何计算? 源代码 解释 设置训练数据 设置SVM的参数 由SVM分类的区域 支持向量 结果 支持向量机SVM简 ...

  8. 卷积神经网络 svm分类器_使用卷积神经网络的狗品种分类器

    卷积神经网络 svm分类器 介绍 (Introduction) Do you know the breed of the dog in the picture above? If you don't ...

  9. 基于OpenCV的 SVM算法实现数字识别(四)---代码实现

    三.基于SVM算法实现手写数字识别 作为一个工科生,而非数学专业的学生,我们研究一个算法,是要将它用于实际领域的.下面给出基于OpenCV3.0的SVM算法手写数字识别程序源码(参考http://bl ...

最新文章

  1. 异常--自定义异常类
  2. 天正计算机命令大全,天正CAD 中按Ctrl+v在不同图中粘贴出现“未知命令T81_tpasteclip”,直接在CAD中就能操作...
  3. 《Reids 设计与实现》第十八章 事务
  4. 今日头条 mysql_今日头条的核心技术细节是什么?
  5. 复利计算——单元测试
  6. C++ Primer Plus学习(十)——类和对象
  7. Java Script基础(一)
  8. 操作config文件
  9. 对WORD文档的关键字搜索
  10. linux zip unzip 命令
  11. Tesseract-OCR4.0识别中文与训练字库实例
  12. java下cmyk图片读取和转换rgb,以及图片压缩
  13. Codeforces Round 1299 简要题解
  14. vulnhub——XXE练习
  15. 嗑药简史:咖啡上瘾,喝还是不喝?
  16. 中文期刊模板的页面格式,以《电力系统自动化》为例
  17. 不错的金庸人物考考你android游戏源码
  18. vue中验证码输入框
  19. CSDN日报20170410 ——《未经检视的人生不值得活》
  20. 环境化学试题及标准答案

热门文章

  1. STIR/SHAKEN 呼叫的身份认证带外传输
  2. 软件生命周期和配置管理
  3. 携程Java开发工程师春招一面+二面面经
  4. 高斯消元法的MATLAB实现
  5. win11家庭版安装ensp出错
  6. [MAUI 项目实战] 手势控制音乐播放器(四):圆形进度条
  7. 18.04.06 魔兽世界三(开战)
  8. 2018hdu个人排位赛:Stadium
  9. 嵌入式linux简介
  10. 当计算机搬动时mac,剁手攻略:当你要换电脑时,Mac Or PC ?