本文主要介绍下opencv中怎样使用hog算法,因为在opencv中已经集成了hog这个类。其实使用起来是很简单的,从后面的代码就可以看出来。本文参考的资料为opencv自带的sample

  关于opencv中hog的源码分析,可以参考本人的另一篇博客:opencv源码解析之(6):hog源码分析

  开发环境:opencv2.4.2+Qt4.8.2+ubuntu12.04+QtCreator2.5.

  实验功能:

  单击Open Image按钮,选择需要进行人检测的一张图片,确定后自动显示出来。该图片的大小没限制。

  单击People Detect按钮,则程序会自动对该图片进行行人检测,且将检测到的效果显示出来,即用1个矩形框将行人框出来。

  单击Close按钮,退出程序。

  实验说明:

  1. hog描述子在opencv中为HOGDescriptor

  2. 可以调用该描述子setSVMDetector方法给用于对hog特征进行分类的svm模型的系数赋值,这里的参数为HOGDescriptor::getDefaultPeopleDetector()时表示采用系统默认的参数,因为这些参数是用很多图片训练而来的。  

  3. 对输入图片进行行人检测时由于图片的大小不一样,所以要用到多尺度检测。这里是用hog类的方法detectMultiScale。参数解释如下:

HOGDescriptor::detectMultiScale(const GpuMat& img, vector<Rect>& found_locations, doublehit_threshold=0, Size win_stride=Size(), Size padding=Size(), double scale0=1.05, int group_threshold=2)

  该函数表示对输入的图片img进行多尺度行人检测 img为输入待检测的图片;found_locations为检测到目标区域列表;参数3为程序内部计算为行人目标的阈值,也就是检测到的特征到SVM分类超平面的距离;参数4为滑动窗口每次移动的距离。它必须是块移动的整数倍;参数5为图像扩充的大小;参数6为比例系数,即滑动窗口每次增加的比例;参数7为组阈值,即校正系数,当一个目标被多个窗口检测出来时,该参数此时就起了调节作用,为0时表示不起调节作用。

   4.  最后对检测出来的目标矩形框,要采用一些方法处理,比如说2个目标框嵌套着,则选择最外面的那个框。
5. 因为hog检测出的矩形框比实际人体框要稍微大些,所以需要对这些矩形框大小尺寸做一些调整。 实验结果:
图片1效果:

  


图片2效果:

  


图片3效果:

  


图片4效果:

  


实验主要部分代码(附录有工程code下载链接):
#include "dialog.h"
#include "ui_dialog.h"
#include <QtCore>
#include <QtGui> Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
ui->setupUi(this);
} Dialog::~Dialog()
{
delete ui;
} void Dialog::on_openButton_clicked()
{
QString img_mame = QFileDialog::getOpenFileName(this, "Open img", "../people", tr("Image Files(*.png *.jpg *.bmp *.jpeg)"));
img = imread( img_mame.toAscii().data() );
imwrite("../hog_test.jpg", img);
ui->textBrowser->setFixedSize(img.cols, img.rows);
ui->textBrowser->append("<img src=../hog_test.jpg>");
} void Dialog::on_detectButton_clicked()
{
vector<Rect> found, found_filtered;
cv::HOGDescriptor people_dectect_hog;
//采用默认的已经训练好了的svm系数作为此次检测的模型
people_dectect_hog.setSVMDetector(cv::HOGDescriptor::getDefaultPeopleDetector());
//对输入的图片img进行多尺度行人检测
//img为输入待检测的图片;found为检测到目标区域列表;参数3为程序内部计算为行人目标的阈值,也就是检测到的特征到SVM分类超平面的距离;
//参数4为滑动窗口每次移动的距离。它必须是块移动的整数倍;参数5为图像扩充的大小;参数6为比例系数,即测试图片每次尺寸缩放增加的比例;
//参数7为组阈值,即校正系数,当一个目标被多个窗口检测出来时,该参数此时就起了调节作用,为0时表示不起调节作用。
people_dectect_hog.detectMultiScale(img, found, 0, Size(8, 8), Size(32, 32), 1.05, 2); //从源码中可以看出:
//#define __SIZE_TYPE__ long unsigned int
//typedef __SIZE_TYPE__ size_t;
//因此,size_t是一个long unsigned int类型
size_t i, j;
for (i = 0; i < found.size(); i++ )
{
Rect r = found[i]; //下面的这个for语句是找出所有没有嵌套的矩形框r,并放入found_filtered中,如果有嵌套的
//话,则取外面最大的那个矩形框放入found_filtered中
for(j = 0; j <found.size(); j++)
if(j != i && (r&found[j])==r)
break;
if(j == found.size())
found_filtered.push_back(r);
} //在图片img上画出矩形框,因为hog检测出的矩形框比实际人体框要稍微大些,所以这里需要
//做一些调整
for(i = 0; i <found_filtered.size(); i++)
{
Rect r = found_filtered[i];
r.x += cvRound(r.width*0.1);
r.width = cvRound(r.width*0.8);
r.y += cvRound(r.height*0.07);
r.height = cvRound(r.height*0.8);
rectangle(img, r.tl(), r.br(), Scalar(0, 255, 0), 3);
}
imwrite("../hog_test_result.jpg", img);
ui->textBrowser->clear();
ui->textBrowser->append("<img src=../hog_test_result.jpg>"); } void Dialog::on_closeButton_clicked()
{
close();
}

实验总结:

从实验的结果来看,图片检测的准确率一般,当人体遮挡情况比较严重,且背景比较复杂时,有些误检和漏检。不过程序的检查速度还行,因为源码中用做了些优化处理。

 附:工程code下载

http://www.cnblogs.com/tornadomeet/archive/2012/08/03/2621814.html

http://www.docin.com/p-119795862.html

http://www.pudn.com/downloads89/sourcecode/graph/texture_mapping/detail339697.html

http://www.pudn.com/downloads377/sourcecode/graph/opencv/detail1626443.html

http://www.doc88.com/p-0901980821190.html

http://wenku.baidu.com/link?url=UyGzJEwDnJoT418mMt2V9ciCoxQlmtGGSkhRmk1mIRh0g0AgyAiylhekqfseOk1c0SgLhc2r-x9CbkdW5nkp_yJu_UI97RVMb-t6SeMeNW_ 中山大学博士学位论文

http://wenku.baidu.com/link?url=U-nR0nMss-k9ohQdLaKijTA2xsnx49kPu_1bnclVNaGqnxILz-8yUGK1pVBQM2lkmtGkxyOh_GobIHQfGsTrQHP61yAIIKdZTxeJRvMYI0i 开尔曼滤波

http://wenku.baidu.com/link?url=U-nR0nMss-k9ohQdLaKijTA2xsnx49kPu_1bnclVNaGqnxILz-8yUGK1pVBQM2lkQSr-1Za7kaSgwJ_kSl3VNmyfL6Y4BQnZuJIM9DAVhUK 人体检测博士论文

http://wenku.baidu.com/link?url=U-nR0nMss-k9ohQdLaKijTA2xsnx49kPu_1bnclVNaGqnxILz-8yUGK1pVBQM2lkxOLrBmNqLzEbQRFTGujs--XJwVat1PcRChTvXNCGaaC 多尺度行人检测

http://www.jdl.ac.cn/project/faceId/res-track.htm

http://www.cnblogs.com/ztfei/archive/2012/09/02/2667607.html

http://wenku.baidu.com/link?url=U-nR0nMss-k9ohQdLaKijTA2xsnx49kPu_1bnclVNaGqnxILz-8yUGK1pVBQM2lkxOLrBmNqLzEbQRFTGujs--XJwVat1PcRChTvXNCGaaC 基于harr和hog的检测

http://wenku.baidu.com/view/359a912ded630b1c59eeb577.html 优化

http://oaps.lib.tsinghua.edu.cn/handle/123456789/2240 清华

http://www.cnblogs.com/tornadomeet/archive/2012/08/15/2640754.html

目标检测之行人检测(Pedestrian Detection)基于hog(梯度方向直方图)--- 梯度直方图特征行人检测、人流检测2的更多相关文章

  1. 目标检测之行人检测(Pedestrian Detection)---行人检测之简介0

    一.论文 综述类的文章 [1]P.Dollar, C. Wojek,B. Schiele, et al. Pedestrian detection: an evaluation of the stat ...

  2. 行人检测(Pedestrian Detection)资源

    一.论文 综述类的文章 [1]P.Dollar, C. Wojek,B. Schiele, et al. Pedestrian detection: an evaluation of the stat ...

  3. 【计算机视觉】行人检测(Pedestrian Detection)资源

    一.论文 综述类的文章 [1]P.Dollar, C. Wojek,B. Schiele, et al. Pedestrian detection: an evaluation of the stat ...

  4. 【论文解读】行人检测:What Can Help Pedestrian Detection?(CVPR'17)

    前言 本篇文章出自CVPR2017,四名作者为Tsinghua University,Peking University, 外加两名来自Megvii(旷视科技)的大佬. 文章中对能够帮助行人检测的ex ...

  5. 行人检测(Pedestrian Detection)资源整合

    一.纸 评论文章分类: [1] D. Geronimo, and A. M.Lopez. Vision-based Pedestrian Protection Systems for Intellig ...

  6. OpenCV中基于HOG特征的行人检测

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

  7. 基于HOG特征的Adaboost行人检测

    原地址:http://blog.csdn.net/van_ruin/article/details/9166591 .方向梯度直方图(Histogramof Oriented Gradient, HO ...

  8. (不断更新)关于显著性检测的调研-Salient Object Detection: A Survey

    <Salient Object Detection: A Survey>作者:Ali Borji.Ming-Ming Cheng.Huaizu Jiang and Jia Li 基本按照文 ...

  9. 目标检测的图像特征提取(一)HOG特点

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

随机推荐

  1. 常用 vim 命令总结

    学习 vim ,是需要经常使用的,而这些命令,是我这段时间最常用的命令,很有效率的提高的我的文本编辑效率.----------------------------------------------- ...

  2. linux根文件系统制作之busybox编译和系统构建【转】

    转自:http://blog.chinaunix.net/uid-29401328-id-5019660.html 介绍完相关文件后我们开始构建文件系统,涉及到的文件等到具体用到的时候再讲. 一.编译 ...

  3. 复制View对象

    
Mark一下 - (UIView*)duplicate:(UIView*)view { NSData * tempArchive = [NSKeyedArchiver archivedDataWit ...

  4. Java爬虫系列之实战:爬取酷狗音乐网 TOP500 的歌曲(附源码)

    在前面分享的两篇随笔中分别介绍了HttpClient和Jsoup以及简单的代码案例: Java爬虫系列二:使用HttpClient抓取页面HTML Java爬虫系列三:使用Jsoup解析HTML 今天 ...

  5. 维生素C - 坏血症

    在地理大发现时代,许多水手在远洋航行时不幸罹患一种典型航海病,患者皮肤溃烂.牙龈出血不止,不久就会危及生命,这就是大名鼎鼎的坏血症,是一种因为缺乏维生素C而产生的的皮.粘膜下出血.齿龈肿胀.关节和肌肉 ...

  6. 【BZOJ1562】【jzyzOJ1730】【COGS409】NOI2009变换序列 二分图匹配

    [问题描述]        对于N个整数0, 1, ……, N-1,一个变换序列T可以将i变成Ti,其中 定义x和y之间的距离.给定每个i和Ti之间的距离D(i,Ti), 你需要求出一个满足要求的变换 ...

  7. Google开源基于Tensorflow的NLP框架重大升级

    http://weibo.com/ttarticle/p/show?id=2309404086117195475716

  8. innodb事务锁

    计算机程序锁   控制对共享资源进行并发访问 保护数据的完整性和一致性   lock  主要是事务,数据库逻辑内容,事务过程 latch/mutex 内存底层锁:   更新丢失 原因: B的更改还没有 ...

  9. C# 导出 数据 到Excel

    /// <summary> /// 实现将数据导出至Excel, /// 在上面的代码中,我们首先将gridview绑定到指定的数据源中,然后在button1的按钮(用来做导出到EXCEL ...

  10. Linux sed 批量替换字符串和更多用法

    比如,要将目录/modules下面所有文件中的zhangsan都修改成lisi,这样做: # sed -i “s/zhangsan/lisi/g” `grep zhangsan -rl /module ...