最近尝试了一下用opencv做了一下车辆检测
其中hog特征使用opencv自带函数库进行提取描述如下:

HOGDescriptor *hog = new HOGDescriptor(Size(64, 64), Size(16, 16), Size(8, 8), Size(8, 8), 9);

上述参数中第一个size代表读入训练数据中图像的大小
第二个为滑动窗口大小
第三个滑动步长
第四个cell的大小
然后就是SVM的使用了

    Ptr < SVM > svm = SVM::create(); //建立对象svm->setType(SVM::C_SVC); svm->setKernel(SVM::LINEAR); //线性核//导入特征矩阵  每一行代表一个特征向量  最后为特征标签Ptr<TrainData> tData = TrainData::create(sample_feature_mat, ROW_SAMPLE,sample_label_mat);//自动设置相应参数并训练svm->trainAuto(tData);

再看看为什么hog特征能较好的对车辆分类
下图显示了我对100个包含车辆的样本(图像上部)与200个不包含车辆的样本(图像下部)进行可视化,显然包含车辆的特征向量与不包含车辆的特征向量有明显区别
所以hog特征能较强的描述目标物体的形状信息
而一般图像中物体特征的表达通常用形状、纹理或者颜色等特征来描述
一般人体或车辆等能够被形状较强的表征,而hog特征正好适合来表征物体的形状信息,所以一般用hog特征来做行人或者车辆检测等等…

完整代码如下:

   //我用的是opencv3.4 HOG与SVM的使用与2.X版本的有些区别string pos_path = "正样本路径";string neg_path = "负样本路径";Mat sample_feature_mat,sample_label_mat;ifstream input_pos_sample(pos_path);ifstream input_neg_sample(neg_path);vector<string>pos_sample_path,neg_sample_path;int feature_dim = 0;string str;int pos_sample_num = 0,neg_sample_num = 0 ;while (getline(input_pos_sample, str))  pos_sample_path.push_back(str);while (getline(input_neg_sample, str))  neg_sample_path.push_back(str);pos_sample_num = pos_sample_path.size();neg_sample_num = neg_sample_path.size();input_pos_sample.close();input_neg_sample.close();HOGDescriptor *hog = new HOGDescriptor(Size(64, 64), Size(16, 16), Size(8, 8), Size(8, 8), 9);//正样本hog特征提取for (int i = 0; i < pos_sample_num; ++i) {Mat input_img = imread(pos_sample_path[i],0);Mat train_data(64, 64, CV_32FC1);resize(input_img, train_data, Size(64, 64));vector<float>descriptor;hog->compute(train_data, descriptor, Size(8, 8));if (i == 0) {feature_dim = descriptor.size();sample_feature_mat = Mat::zeros(pos_sample_num + neg_sample_num, feature_dim, CV_32FC1);sample_label_mat = Mat::zeros(pos_sample_num + neg_sample_num, 1, CV_32SC1);}float *pf = sample_feature_mat.ptr<float>(i);int *pl = sample_label_mat.ptr<int>(i);for (int j = 0; j < feature_dim; ++j) {*pf++ = descriptor[j];}*pl++ = 1;}//负样本hog特征提取for (int i = 0; i < neg_sample_num; ++i) {Mat input_img = imread(neg_sample_path[i],0);Mat train_data(64, 64, CV_32FC1);resize(input_img, train_data, Size(64, 64));vector<float>descriptor;hog->compute(train_data, descriptor, Size(8, 8));float *pf = sample_feature_mat.ptr<float>(i + pos_sample_num);int *pl = sample_label_mat.ptr<int>(i + pos_sample_num);for (int j = 0; j < feature_dim; ++j) {*pf++ = descriptor[j];}*pl++ = -1;}//训练数据Ptr < SVM > svm = SVM::create();svm->setType(SVM::C_SVC);svm->setKernel(SVM::LINEAR);Ptr<TrainData> tData = TrainData::create(sample_feature_mat, ROW_SAMPLE,sample_label_mat);cout << "train begin" << endl;svm->trainAuto(tData);svm->save("D:\\traindata\\SVM_Model.xml"); //训练结果保存文件cout << "train done" << endl;

我用100个正样本200个负样本训练车辆检测
结果对于KITTI的车辆数据分类正确率大约90%
分类结果还行,增加训练数据还能达到更高的准确率
网上也很多例程,我就不详细说明了

opencv +Hog + SVM 车辆检测相关推荐

  1. opencv HOG SVM 二

    这一部分是hog svm 识别部分 训练部分 show me the code #include <iostream> #include <fstream> #include ...

  2. opencv HOG SVM

    show me the code 这个无需多做解释,可以直接看代码,这一部分是训练部分. #include <iostream> #include <fstream> #inc ...

  3. 【机器学习】HOG+SVM进行车辆检测的流程及源码

    在进行机器学习检测车道线时,参考了这篇博文,基于LBP+SVM实现了车道线检测的初步效果.觉得讲解很到位,代码也容易理解和修改,故在此分享,供更多人学习. HOG SVM 车辆检测 近期需要对卡口车辆 ...

  4. 行人检测HOG+SVM:综述、INRIADATA数据集、线性SVM

    目录 1. 行人检测算法研究综述 2. 基于机器学习的方法:人工特征+分类器 2.1 HOG+SVM 2.2 HOG+Adaboost 2.3 ICF+AdaBoost 2.4 DPM+ latent ...

  5. python视频行人检测_python+opencv3.4.0 实现HOG+SVM行人检测的示例代码

    参照opencv官网例程写了一个基于python的行人检测程序,实现了和自带检测器基本一致的检测效果. opencv版本:3.4.0 训练集和opencv官方用了同一个,可以从http://pasca ...

  6. 烟雾检测(1)HOG+SVM 检测

    前言 效果如下,将下图喂到test程序内可得img1所示输出. 大作业要求 报告的主题是video based smoke detection,四人一组,一组交一份报告. 预先提供train.test ...

  7. OpenCV实战【2】HOG+SVM实现行人检测

    目录 HOG是什么? HOG vs SIFT HOG步骤 HOG在检测行人中的方式 Opencv实现 HOGDescriptor的构造函数: 行人检测HOG+SVM步骤 简化版的HOG计算 HOG是什 ...

  8. OpenCV实战4: HOG+SVM实现行人检测

    目前基于机器学习方法的行人检测的主流特征描述子之一是HOG(Histogram of Oriented Gradient, 方向梯度直方图)HOG 特征是用于目标检测的特征描述子,它通过计算和统计图像 ...

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

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

最新文章

  1. HDU2594 KMP next数组的应用
  2. PHPExcel开发者文档[中文版]
  3. xps数据怎么导出为txt_使用ExportAsFixedFormat方法将数据导出到PDF或XPS.docx
  4. Eclipse、NetBeans、IntelliJ集成开发工具 Java IDE
  5. ubuntu查看gpu使用率_如何监控GPU卡的使用率(Linux)
  6. 【DP】数的划分(ybtoj DP-1-3)
  7. 怎样从Linux终端管理进程:10个你必须知道的命令
  8. java中date类型如何赋值_Java 中的类型传递问题解惑
  9. 游戏迷英雄联盟游戏高清壁纸!扮演你的英雄
  10. 进军SharePoint,资料先行....
  11. PHP EOF使用方法
  12. 超级炫酷个人引导页自适应HTML源码
  13. 面试时被问到职业规划怎么回答?
  14. 支付网关 | 京东618、双11用户支付的核心承载系统(上篇)
  15. 【LeetCode】把数字翻译成字符串最长不含重复字符的子字符串
  16. STL库:stack和queue
  17. mysql5.7.17 32_mysql—MySQL 5.7.17安装及基本SQL语句(第七章)
  18. 竞品分析——崩坏3 战双帕弥什
  19. python手机编译器怎么编写程序_怎么用手机编写Python程序?
  20. 生物学重复好不好--看看样本相关性

热门文章

  1. Fine-Grained Representation Learning and Recognition by Exploiting Hierarchical Semantic Embedding
  2. 一次Linux系统被攻击的分析过程
  3. Linq技术四:动态Linq技术 -- Linq.Expressions
  4. URLEncoder.encode(String url)和URLDecoder.decode(String url)
  5. 神经网络阈值是什么意思,神经网络阈值如何确定
  6. 你也许不知道的5个微信小技巧
  7. Cocos精品《热血传奇》|五千个日夜 同一个传奇
  8. 如何搭建储能监控云平台?
  9. AI“头雁”百度的进取之道:善弈者通盘无妙手
  10. debian配置网卡