当前位置: 首页 > news >正文

机器学习 C++ 的opencv实现SVM图像二分类的训练 (二)【附源码】

本节讲机器学习 C++ 的opencv实现SVM图像二分类的训练,下节讲测试:
数据集合data内容如下:
下载地址为:https://download.csdn.net/download/hgaohr1021/89506900
在这里插入图片描述

#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 = "data\\train_image\\1";vector<string> files;getFiles(filePath, files);int number = files.size();for (int i = 0; i < number; i++){Mat  SrcImage = imread(files[i].c_str());resize(SrcImage, SrcImage, cv::Size(60, 256), (0, 0), (0, 0), cv::INTER_LINEAR);  //将图片调整为相同的大小SrcImage = SrcImage.reshape(1, 1);trainingImages.push_back(SrcImage);trainingLabels.push_back(1);}
}
void get_0(Mat& trainingImages, vector<int>& trainingLabels)
{string filePath = "data\\train_image\\0";vector<string> files;getFiles(filePath, files);int number = files.size();for (int i = 0; i < number; i++){Mat  SrcImage = imread(files[i].c_str());resize(SrcImage, SrcImage, cv::Size(60, 256), (0, 0), (0, 0), cv::INTER_LINEAR);  //将图片调整为相同的大小SrcImage = SrcImage.reshape(1, 1);trainingImages.push_back(SrcImage);trainingLabels.push_back(0);}
}

运行结果为:

在这里插入图片描述
运行玩,在根目录里面出现,svm.xml文件,为下一节,测试图片用。
数据集下载地址为:https://download.csdn.net/download/hgaohr1021/89506900

相关文章:

  • 我在高职教STM32——GPIO入门之按键输入(1)
  • .net core 的缓存方案
  • 特别有用!配置Overall_Elapsed后,大大提升您使用fiddler的工作效率!
  • 【Python爬虫】Python爬取喜马拉雅,爬虫教程!
  • Golang | Leetcode Golang题解之第204题计数质数
  • 2024年6月总结及随笔之打卡网红点
  • 2023年下半年软考网络规划设计师论文真题
  • HSRP热备份路由协议(VRRP虚拟路由冗余协议)配置以及实现负载均衡
  • 揭秘BERT背后的魔力:语义相似度算法深度剖析
  • MySQL之可扩展性(九)
  • pytorch笔记:named_parameters
  • springboot 集成阿里云 OSS
  • 41、web基础和http协议
  • SpringMVC系列二: 请求方式介绍
  • 电脑系统重装怎么操作?分享四个win10重装系统方法
  • Android开源项目规范总结
  • android图片蒙层
  • codis proxy处理流程
  • C学习-枚举(九)
  • FastReport在线报表设计器工作原理
  • Gradle 5.0 正式版发布
  • java架构面试锦集:开源框架+并发+数据结构+大企必备面试题
  • MobX
  • MYSQL如何对数据进行自动化升级--以如果某数据表存在并且某字段不存在时则执行更新操作为例...
  • python学习笔记 - ThreadLocal
  • 函数式编程与面向对象编程[4]:Scala的类型关联Type Alias
  • ------- 计算机网络基础
  • 模型微调
  • 前端学习笔记之原型——一张图说明`prototype`和`__proto__`的区别
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • hi-nginx-1.3.4编译安装
  • SAP CRM里Lead通过工作流自动创建Opportunity的原理讲解 ...
  • ​LeetCode解法汇总2670. 找出不同元素数目差数组
  • # centos7下FFmpeg环境部署记录
  • #LLM入门|Prompt#2.3_对查询任务进行分类|意图分析_Classification
  • #我与Java虚拟机的故事#连载10: 如何在阿里、腾讯、百度、及字节跳动等公司面试中脱颖而出...
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示
  • (C++)八皇后问题
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (附源码)springboot猪场管理系统 毕业设计 160901
  • (原創) X61用戶,小心你的上蓋!! (NB) (ThinkPad) (X61)
  • (转)Linux整合apache和tomcat构建Web服务器
  • ******IT公司面试题汇总+优秀技术博客汇总
  • ***检测工具之RKHunter AIDE
  • .equal()和==的区别 怎样判断字符串为空问题: Illegal invoke-super to void nio.file.AccessDeniedException
  • .NET Remoting学习笔记(三)信道
  • .NET/C# 使用 #if 和 Conditional 特性来按条件编译代码的不同原理和适用场景
  • .netcore 获取appsettings
  • .sdf和.msp文件读取
  • @FeignClient 调用另一个服务的test环境,实际上却调用了另一个环境testone的接口,这其中牵扯到k8s容器外容器内的问题,注册到eureka上的是容器外的旧版本...
  • @javax.ws.rs Webservice注解
  • @RequestParam @RequestBody @PathVariable 等参数绑定注解详解
  • [ Linux ] git工具的基本使用(仓库的构建,提交)