Hog实例
1.计算Hog的特征得维度:
- #include <iostream>
- #include <opencv2/core/core.hpp>
- #include <opencv2/highgui/highgui.hpp>
- #include <opencv2/objdetect/objdetect.hpp>
- #include <opencv2/imgproc/imgproc.hpp>
- using namespace std;
- using namespace cv;
- #define Posnum 2 //正样本个数
- #define Negnum 2 //负样本个数
- int main()
- {
- char adpos[128], adneg[128];
- HOGDescriptor hog(Size(64, 64), Size(16, 16), Size(8, 8), Size(8, 8), 3);//利用构造函数,给对象赋值。
- int DescriptorDim;//HOG描述子的维数
- Mat samFeatureMat, samLabelMat;
- //依次读取正样本图片,生成HOG描述子
- for (int i = 1; i <= Posnum; i++)
- {
- sprintf_s(adpos, "E:\\VS2015Opencv\\vs2015\\project\\picture\\pos\\%d.png", i);
- Mat src = imread(adpos);//读取图片
- resize(src, src, Size(64, 64));
- vector<float> descriptors;//HOG描述子向量
- hog.compute(src, descriptors);
- if (i == 1)
- {
- DescriptorDim = descriptors.size();
- samFeatureMat = Mat::zeros(Posnum + Negnum, DescriptorDim, CV_32FC1);
- samLabelMat = Mat::zeros(Posnum + Negnum, 1, CV_32FC1);
- }
- for (int j = 0; j<DescriptorDim; j++)
- {
- samFeatureMat.at<float>(i - 1, j) = descriptors[j];
- samLabelMat.at<float>(i - 1, 0) = 1;
- }
- }
- //依次读取负样本图片,生成HOG描述子
- for (int k = 1; k <= Negnum; k++)
- {
- sprintf_s(adneg, "E:\\VS2015Opencv\\vs2015\\project\\picture\\neg\\%d.png", k);
- Mat src = imread(adneg);//读取图片
- resize(src, src, Size(64, 64));
- vector<float> descriptors;//HOG描述子向量
- hog.compute(src, descriptors);
- for (int l = 0; l<DescriptorDim; l++)
- {
- samFeatureMat.at<float>(k + Posnum - 1, l) = descriptors[l];
- samLabelMat.at<float>(k + Posnum - 1, 0) = -1;
- }
- }
- cout << "特征个数:" << samFeatureMat.rows << endl;
- cout << "特征维度:" << samFeatureMat.cols << endl;
- system("pause");
- return 0;
- }
这是一个很简单的代码;
- HOGDescriptor(Size _winSize, ---:窗口大小,即检测的范围大小,前面的64*128
- Size _blockSize,--- 前面的2*2的cell,即cell的数量,这里要填像素值Size(16,16)
- Size _blockStride,---每次block移动的步长,以像素计,为一个cell像素块大小
- Size _cellSize, ---cell的大小,前面的8*8
- int _nbins, ----直方图的组数
- int _derivAperture=1, --梯度计算的参数
- double _winSigma=-1, --梯度计算的参数
- int _histogramNormType=HOGDescriptor::L2Hys,---归一化的方法
- double _L2HysThreshold=0.2,
- bool _gammaCorrection=false, ---是否要伽马校正
- int _nlevels=HOGDescriptor::DEFAULT_NLEVELS,
- bool _signedGradient=false)
相关函数可参考:HOG:从理论到OpenCV实践
setSVMDetector 函数
C++: void gpu::HOGDescriptor::detect(const GpuMat& img,
(3)参数注释
下面是简单调用api进行行人检测:
- #include <opencv2/opencv.hpp>
- #include <opencv2/objdetect.hpp>
- using namespace std;
- using namespace cv;
- int main()
- {
- Mat src, dst;
- src = imread("E:\\VS2015Opencv\\vs2015\\project\\picture\\x1.png", );
- if (src.empty())
- {
- printf("can not load the image...\n");
- return -;
- }
- dst = src.clone();
- vector<Rect> findrects, findrect;
- HOGDescriptor HOG;
- //SVM分类器
- HOG.setSVMDetector(HOGDescriptor::getDefaultPeopleDetector());
- //多尺度检测
- HOG.detectMultiScale(src, findrects, , Size(, ), Size(, ), 1.05, );
- //若rects有嵌套,则取最外面的矩形存入rect
- for (int i = ; i < findrects.size(); i++)
- {
- Rect rect = findrects[i];
- int j = ;
- for (; j < findrects.size(); j++)
- if (j != i && (rect & findrects[j]) == rect)
- break;
- if (j == findrects.size())
- findrect.push_back(rect);
- }
- //框选出检测结果
- for (int i = ; i<findrect.size(); i++)
- {
- RNG rng(i);
- Scalar color = Scalar(rng.uniform(, ), rng.uniform(, ), rng.uniform(, ));
- rectangle(dst, findrect[i].tl(), findrect[i].br(), color, );
- }
- imshow("src", src);
- imshow("dst", dst);
- waitKey();
- return ;
- }
Hog实例的更多相关文章
- 最近学习工作流 推荐一个activiti 的教程文档
全文地址:http://www.mossle.com/docs/activiti/ Activiti 5.15 用户手册 Table of Contents 1. 简介 协议 下载 源码 必要的软件 ...
- 理解图像Garbor和HOG特征的提取方法及实例应用
前言:今天接触到了这两个特征,看了课本和博客后很蒙蔽,没有理解这两个特征,本篇博客的目的是只是参考其他的博客总结这两个特征,如果未来能研究和工作领域是这方面的话再回来自己研学,如有错误也欢迎指出. G ...
- HOG参数简介及Hog特征维数的计算(转)
HOG构造函数 CV_WRAP HOGDescriptor() :winSize(64,128), blockSize(16,16), blockStride(8,8), cellSize( ...
- js-静态、原型、实例属性
本篇来说一下js中的属性: 1.静态属性 2.原型属性 3.实例属性 静态属性: function klass(){} var obj=new klass(); klass.count=0; klas ...
- ZIP压缩算法详细分析及解压实例解释
最近自己实现了一个ZIP压缩数据的解压程序,觉得有必要把ZIP压缩格式进行一下详细总结,数据压缩是一门通信原理和计算机科学都会涉及到的学科,在通信原理中,一般称为信源编码,在计算机科学里,一般称为数据 ...
- EntityFramework Core 1.1是如何创建DbContext实例的呢?
前言 上一篇我们简单讲述了在EF Core1.1中如何进行迁移,本文我们来讲讲EF Core1.1中那些不为人知的事,细抠细节,从我做起. 显式创建DbContext实例 通过带OnConfiguri ...
- redis集成到Springmvc中及使用实例
redis是现在主流的缓存工具了,因为使用简单.高效且对服务器要求较小,用于大数据量下的缓存 spring也提供了对redis的支持: org.springframework.data.redis.c ...
- 流程开发Activiti 与SpringMVC整合实例
流程(Activiti) 流程是完成一系列有序动作的概述.每一个节点动作的结果将对后面的具体操作步骤产生影响.信息化系统中流程的功能完全等同于纸上办公的层级审批,尤其在oa系统中各类电子流提现较为明显 ...
- UWP开发之Template10实践:本地文件与照相机文件操作的MVVM实例(图文付原代码)
前面[UWP开发之Mvvmlight实践五:SuspensionManager中断挂起以及复原处理]章节已经提到过Template10,为了认识MvvmLight的区别特做了此实例. 原代码地址:ht ...
随机推荐
- zabbix | 离线安装agent
zabbix | 离线安装agent 环境 centos6.7 zabbix-server 3.4 步骤 1. 下载rpm包 首先下载支持的插件 yum install yum-plugin-down ...
- 《手把手教你构建自己的 Linux 系统》学习笔记(3)
需要注意的是,制作操作系统权限全程都要用 root pushd 和 popd 为了方便目录管理,所以出现了这种两个命令,他们的原理就是利用堆栈来实现目录管理. 这两个命令,pushd 负责将指定的目录 ...
- javascript生成指定位数的随机数
<script type="text/javascript"> document.write("请输入要生成随机数的位数:"); // digit是 ...
- Dart中类的getter和setter
Dart类Getters和Setter Getters和Setter(也称为访问器和更改器)允许程序分别初始化和检索类字段的值. 使用get关键字定义getter或访问器.Setter或存取器是使用s ...
- 【EasyUI总结】EasyUI开发中遇到的坑
普遍: 1.easyui在书写键值对的时候要注意是否要加引号,在需要加引号的地方不加则无法渲染: datagrid数据网格: 1.datagrid默认请求方式是post,如果要使用分页功能pagina ...
- 【Git】git使用 - rebase的使用
官方参考指南: Pro Git Book v2, § rebasing. English Pro Git Book v2, § rebase:衍合. 中文版 (建议还是看一下英文原版,就当熟练英语.) ...
- 一些linux软件国内源
1. ubuntu 版本号 Ubuntu 12.04 (LTS)代号为precise. Ubuntu 14.04 (LTS)代号为trusty. Ubuntu 15.04 代号为vivid. Ubun ...
- tcp客户端从服务器下载文本文件
代码讲解: server import socket def send_file_client(new_client_socket, new_client_addr): # 接收客户端需要下载的文件名 ...
- PHP0011:学生信息管理案例
PHP中 html js 混合用
- xadmin使用
xadmin使用 官方 使用参考