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 函数

(1)作用:设置线性SVM分类器的系数
(2)函数原型:C++: void gpu::HOGDescriptor::setSVMDetector(const vector<float>& detector
detect 函数
(1)作用:用没有多尺度的窗口进行物体检测
(2)函数原型:

C++: void gpu::HOGDescriptor::detect(const GpuMat& img,

                     vector<Point>& found_locations,

                     double hit_threshold=0, 
                     Size win_stride=Size(), 
                     Size padding=Size()
                     )  

(3)参数注释

<1>img:源图像。只支持CV_8UC1和CV_8UC4数据类型。
<2>found_locations:检测出的物体的边缘。
<3>hit_threshold:特征向量和SVM划分超平面的阀值距离。通常它为0,并应由检测器系数决定。但是,当系数被省略时,可以手动指定它。
<4>win_stride:窗口步长,必须是块步长的整数倍。
<5>padding:模拟参数,使得CUP能兼容。目前必须是(0,0)。

下面是简单调用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实例的更多相关文章

  1. 最近学习工作流 推荐一个activiti 的教程文档

    全文地址:http://www.mossle.com/docs/activiti/ Activiti 5.15 用户手册 Table of Contents 1. 简介 协议 下载 源码 必要的软件 ...

  2. 理解图像Garbor和HOG特征的提取方法及实例应用

    前言:今天接触到了这两个特征,看了课本和博客后很蒙蔽,没有理解这两个特征,本篇博客的目的是只是参考其他的博客总结这两个特征,如果未来能研究和工作领域是这方面的话再回来自己研学,如有错误也欢迎指出. G ...

  3. HOG参数简介及Hog特征维数的计算(转)

    HOG构造函数 CV_WRAP HOGDescriptor() :winSize(64,128), blockSize(16,16), blockStride(8,8),      cellSize( ...

  4. js-静态、原型、实例属性

    本篇来说一下js中的属性: 1.静态属性 2.原型属性 3.实例属性 静态属性: function klass(){} var obj=new klass(); klass.count=0; klas ...

  5. ZIP压缩算法详细分析及解压实例解释

    最近自己实现了一个ZIP压缩数据的解压程序,觉得有必要把ZIP压缩格式进行一下详细总结,数据压缩是一门通信原理和计算机科学都会涉及到的学科,在通信原理中,一般称为信源编码,在计算机科学里,一般称为数据 ...

  6. EntityFramework Core 1.1是如何创建DbContext实例的呢?

    前言 上一篇我们简单讲述了在EF Core1.1中如何进行迁移,本文我们来讲讲EF Core1.1中那些不为人知的事,细抠细节,从我做起. 显式创建DbContext实例 通过带OnConfiguri ...

  7. redis集成到Springmvc中及使用实例

    redis是现在主流的缓存工具了,因为使用简单.高效且对服务器要求较小,用于大数据量下的缓存 spring也提供了对redis的支持: org.springframework.data.redis.c ...

  8. 流程开发Activiti 与SpringMVC整合实例

    流程(Activiti) 流程是完成一系列有序动作的概述.每一个节点动作的结果将对后面的具体操作步骤产生影响.信息化系统中流程的功能完全等同于纸上办公的层级审批,尤其在oa系统中各类电子流提现较为明显 ...

  9. UWP开发之Template10实践:本地文件与照相机文件操作的MVVM实例(图文付原代码)

    前面[UWP开发之Mvvmlight实践五:SuspensionManager中断挂起以及复原处理]章节已经提到过Template10,为了认识MvvmLight的区别特做了此实例. 原代码地址:ht ...

随机推荐

  1. 硬件知识整理part3--电阻在单片机系统中的应用

    邦有道,如矢:邦无道,如矢.  --孔子 电阻在电路中主要功能是限流和分压等等.在单片机系统中自然也是. 电阻作为限流应该是最常用的应用之一,对于单片机外围设计来说,电阻的应用非常重要,在很多时候,我 ...

  2. mybatis_day01

    Mybatis01 1.什么是mybatis 1.1mybatis 一个基于Java的持久层框架 1.2持久层 操作数据库那层代码 项目分层: 界面层(jps/controller) 业务层(serv ...

  3. mysql 连接查询 转换group_concat, find_in_set

    1.a表 2.b表 3.连接(a_u_id 对应b表的b_id) select a.a_id,a.a_u_id,group_concat(b.b_name) from a_tb a left join ...

  4. P1089题解 津津的储蓄计划

    来水一篇题解 #include <iostream> using namespace std; int main() { int month[12]; int mother=0,have= ...

  5. PHP MySQLi Prepared Statements Tutorial to Prevent SQL Injection

    https://websitebeaver.com/prepared-statements-in-php-mysqli-to-prevent-sql-injection#introduction On ...

  6. Linux系统下的CPU、内存、IO、网络的压力测试

    本文转载自:小豆芽博客 一.对CPU进行简单测试: 1.通过bc命令计算特别函数 例:计算圆周率 echo "scale=5000; 4*a(1)" | bc -l -q MATH ...

  7. jenkins自动化部署(tomcat+git)

    一.安装jenkins 1.安装jdk 查看可安装版本:yum search openjdk 安装:yum install -y java-1.8.0-openjdk java-1.8.0-openj ...

  8. Mac苹果电脑如何格式化?

    一般而言,我们想要在Windows系统上实现格式化操作是非常容易的.然而在苹果电脑上,我们则需要通过launchpad下的磁盘工具来进行,相对而言比较麻烦.关于“苹果电脑怎么格式化”的问题也困扰着无数 ...

  9. web渗透漏洞靶场收集

    最近将自己遇到过或者知道的web靶场链接奉上 0X01 DVWA 推荐新手首选靶场,配置简单,需下载phpstudy和靶场文件包,简单部署之后即可访问. 包含了常见的web漏洞(php的),每个漏洞分 ...

  10. C++常见编译问题记录

    1.类名重复问题 在同一个项目下,分文件编译时,所有的文件最后会被编译到一个可执行程序或dll中,所以同一个项目下文件中不能出现两个相同的类名,否则编译器无法区分使用的到底是那个类,就会出现LINK2 ...