目标检测之行人检测(Pedestrian Detection)基于hog(梯度方向直方图)--- 梯度直方图特征行人检测、人流检测2...
本文主要介绍下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
转载于:https://www.cnblogs.com/pengkunfan/p/4137532.html
目标检测之行人检测(Pedestrian Detection)基于hog(梯度方向直方图)--- 梯度直方图特征行人检测、人流检测2...相关推荐
- 行人检测--What Can Help Pedestrian Detection?
What Can Help Pedestrian Detection? CVPR2017 本文主要分析 extra features 对于 基于CNN 的行人检测有什么帮助,设计了一个行人检测网络 H ...
- 目标检测20年(Object Detection in 20 Years)
Object Detection in 20 Years: A Survey Zhengxia Zou, Zhenwei Shi, Member, IEEE, Yuhong Guo, and Jiep ...
- 图像识别和目标检测系列(Part 1)基于传统计算机视觉技术的图像识别简介
Image Recognition and Object Detection : Part 1 图像识别和目标检测简史 图像识别(又称图像分类) 图像分类器的剖析 Step 1 : Preproces ...
- OpenFace库(Tadas Baltrusaitis)中基于HOG进行正脸人脸检测的测试代码
Tadas Baltrusaitis的OpenFace是一个开源的面部行为分析工具,它的源码可以从https://github.com/TadasBaltrusaitis/OpenFace下载.Ope ...
- 基于深度学习特征的植物病虫害检测
ABSTRACT 及时.准确地诊断植物病害,对于防止农业生产的损失和农产品的损失或减少具有重要作用.为了解决这类问题,可以使用基于机器学习的方法.近年来,在图像处理中应用尤其广泛的深度学习为精准农业 ...
- 文献记录(part45)--Pedestrian detection with super-resolution reconstruction for low-quality image
学习笔记,仅供参考,有错必纠 关键词:行人检测;低质量;SRGAN;Faster R-CNN Pedestrian detection with super-resolution reconstruc ...
- (论文阅读)NMS by Representative Region: Towards Crowded Pedestrian Detection by Proposal Pairing
2020CVPR的密集行人检测论文 原文链接: NMS by Representative Region: Towards Crowded Pedestrian De ...
- 行人检测(Pedestrian Detection)资源
行人检测(Pedestrian Detection)资源 原文链接 http://hi.baidu.com/susongzhi/item/085983081b006311eafe38e7 一.论文 C ...
- 转:行人检测(Pedestrian Detection)资源
.论文 CVPR 2012 与行人检测相关的论文 [1] Contextual Boost for Pedestrian Detection YuanyuanDing, Jing Xiao [2] ...
最新文章
- nmap脚本(nse)原理和编写
- API 分页设计与实现探讨
- python【蓝桥杯vip练习题库】ALGO-75筛选号码(约瑟夫环)
- 计算机电缆称赞千 捷网络下拉刷词,电脑常用技巧
- php5.0 aes加解密,PHP的aes加解密算法
- ProGuard中keep到底有什么作用
- Lua 调试(Debug)
- 太想成功了--成功之前,你是否养成了这些习惯?
- 如何使用Python Flask编写Web服务
- LeetCode 540. 有序数组中的单一元素(Single Element in a Sorted Array) 42
- 电子游戏理论基础初探
- 7.2.5 dps 测试软件,7.2.5冰DK萨墓六大DPS饰品测试:属性机制及分析
- 电驴无法增加服务器怎么办,电驴连接不上服务器是什么原因?介绍原因及解决方法步骤...
- Tomcat安装及配置详解
- notepad++查看二进制.class文件——HexEditor插件(64/32位)安装教程
- 香帅的北大金融学课笔记15 -- 大师投资智慧
- 5G关键技术之波束成型
- windows环境搭建MQTT
- Redis 之 subscribe 订阅模式封装
- nginx 之 proxy_pass详解(好文章!!详细)
热门文章
- Python-Jenkins助力传统发布流程
- mac 下系统目录权限问题
- targetcli读取prefs.bin出错的问题的解决方法
- crontab FAQ
- Apache Rewrite规则详解[转]
- URAL 7077 Little Zu Chongzhi's Triangles(14广州I)
- USACO 1.3... 虫洞 解题报告(搜索+强大剪枝+模拟)
- ubuntu 下安装 VIM 依赖vim-common错误
- 引用和const 引用的区别(转自chinaitlab)
- H3CNE考试讨论群