OpenCV3特征提取与目标检测之HOG(二)——使用官方的行人分类器实现行人检测
一、概述
前面看到如何使用HOG去提取一张图像的中的局部目标的特征,那么得到了这些特征之后,用来做什么,OpencCV的官方给了一个使用HOG进行行人检测的样例。所加载的分类器是官方已经训练好的,而OpenCV官方自带的分类器是利用Navneet Dalal和Bill Triggs提供的样本进行训练的,并利用线性SVM作为分类器,从而实现行人检测。
二.代码实现
#pragma once#include <iostream>
#include <string>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/objdetect/objdetect.hpp>
#include <opencv2/ml/ml.hpp>
#include <opencv2\opencv.hpp>
#include<ctime>using namespace std;
using namespace cv;
using namespace cv::ml;class HogDetection
{
public:HogDetection();HogDetection(Mat _src);~HogDetection();Mat hogSvm();
private:Mat src;
};
实现文件:
#include "HogDetection.h"
#include <opencv2\xfeatures2d\nonfree.hpp>HogDetection::HogDetection()
{}HogDetection::HogDetection(Mat _src)
{src = _src;
}HogDetection::~HogDetection()
{
}Mat HogDetection::hogSvm()
{//外接矩形数组vector<Rect> found, found_filtered; clock_t start, end;start = clock();//HOG特征检测器HOGDescriptor hog;//设置SVM分类器为默认参数 hog.setSVMDetector(HOGDescriptor::getDefaultPeopleDetector());//对图像进行多尺度检测,检测窗口移动步长为(8,8)hog.detectMultiScale(src, found, 0, Size(2, 2), Size(0, 0), 1.05, 2);end = (double)(1000 * (clock() - start) / CLOCKS_PER_SEC);cout << "HOG Detection time: "<<end << "ms!" << endl;//找出所有没有嵌套的矩形框r,并放入found_filtered中,如果有嵌套的话,则取外面最大的那个矩形框放入found_filtered中for (int i = 0; i < found.size(); i++){Rect r = found[i];int j = 0;for (; j < found.size(); j++){if (j != i && (r & found[j]) == r){break;} } if (j == found.size()){found_filtered.push_back(r);} }//画矩形框,因为hog检测出的矩形框比实际人体框要稍微大些,所以这里需要做一些调整for (int 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(src, r.tl(), r.br(), Scalar(0, 0, 255), 3);}return src;
}
主函数:
#include "HogDetection.h"using namespace std;
using namespace cv;
using namespace cv::ml;int main(void)
{Mat src = imread("C:/Users/matt/Desktop/demo/05.jpg");namedWindow("src", WINDOW_NORMAL);imshow("src", src);HogDetection hogDet(src);Mat svm_dst = hogDet.hogSvm();namedWindow("HOGSVM", WINDOW_NORMAL);imshow("HOGSVM", svm_dst);waitKey(0);return 0;
}
运行结果:
3.运行得到的结果并不见得都能适用个人项目的应用场合。因此,针对个人的特定应用场景,有时候很有必要进行重新训练得到适合自己使用的分类器。
后记
1.关于整个工程的源码,运行程序时的bug,或者有如何优代码的想法都可以加这个群(487350510)互相讨论学习。
OpenCV3特征提取与目标检测之HOG(二)——使用官方的行人分类器实现行人检测相关推荐
- OpenCV3特征提取与目标检测之HOG(一)——HOG的概述与原理
1.HOG(Histogram of Oriented Gradient)是方向梯度直方图的意思,是一种特性描述子.通过计算与统计图像局部区域的梯度方向直方图来构成特征.边缘是图像颜色剧变的区域,在一 ...
- 目标检测的图像特征提取之(一)Hog特征提取
Hog特征实质是:梯度的统计信息,即针对边缘作特征提取 意义:目标的表象和形状 转载于zouxy09大神的文章,加上自己些微的理解和应用! http://blog.csdn.net/zouxy09/a ...
- sklearn逻辑回归 极大似然 损失_收藏!攻克目标检测难点秘籍二,非极大值抑制与回归损失优化之路...
点击上方"AI算法修炼营",选择加星标或"置顶" 标题以下,全是干货 前面的话 在前面的秘籍一中,我们主要关注了模型加速之轻量化网络,对目标检测模型的实时性难点 ...
- 人工智能目标检测模型总结(二)——目标检测two-stage模型汇总
two-stage模型:R-CNN.Fast R-CNN.Faster R-CNN 三个模型都是Ross Girshick教授分别在2014.2015年提出来的,在PASCAL VOC 2007数据集 ...
- 深度学习论文阅读目标检测篇(二):Fast R-CNN《Fast R-CNN》
深度学习论文阅读目标检测篇(二):Fast R-CNN<Fast R-CNN> Abstract 摘要 1. Introduction 引言 1.1 RCNN and SPPnet 1.2 ...
- 目标检测之行人检测(Pedestrian Detection)基于hog(梯度方向直方图)--- 梯度直方图特征行人检测、人流检测2...
本文主要介绍下opencv中怎样使用hog算法,因为在opencv中已经集成了hog这个类.其实使用起来是很简单的,从后面的代码就可以看出来.本文参考的资料为opencv自带的sample. 关于op ...
- OpenCV学习笔记(二十六)——小试SVM算法ml OpenCV学习笔记(二十七)——基于级联分类器的目标检测objdect OpenCV学习笔记(二十八)——光流法对运动目标跟踪Video Ope
OpenCV学习笔记(二十六)--小试SVM算法ml 总感觉自己停留在码农的初级阶段,要想更上一层,就得静下心来,好好研究一下算法的东西.OpenCV作为一个计算机视觉的开源库,肯定不会只停留在数字图 ...
- 目标图像的HOG特征提取matlab仿真
目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 HOG特征提取方法就是将一个image(你要检测的目标或者扫描窗口): 1)灰度化(将图像看做一个x ...
- 利用Hog特征和SVM分类器进行行人检测
1.HOG特征: 方向梯度直方图(Histogram of Oriented Gradient, HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子.它通过计算和统计图像局部区域的 ...
最新文章
- c语言boolean作为全局变量_最容易忽略的C语言知识点细节,编程大牛进阶之路!...
- 明细表如何添加重量_关于Revit中明细表标准的导出及导入
- (转)#ifndef的用法
- 谋划一年,还把手机藏鞋里?00后高考作弊被判刑
- UVA216 ——dfs
- java sftp 密钥_通过密钥 SFTP (二):启用没有 Shell 访问权限的 SFTP 账户
- php执行另一个页面,从另一个PHP脚本执行PHP脚本
- PS教您与粗壮的胳膊拜拜
- graphviz安装_离线安装vscode插件,你可能会用到!
- 九度oj题目amp;吉大考研11年机试题全解
- 刷题记录 CF每日一题打卡 2020.6月7-6月13
- hdu 6377 度度熊看球赛 (dp)
- 电脑qq聊天记录迁移--备份与恢复
- iOS 清理缓存简介
- 请求的url中带#是什么意思呢?
- 4.1关系运算符和逻辑运算符
- \u开头的unicode中的\u被转义\\u的问题处理
- 你知道管理工作中要远离三只猫吗?
- r语言各形状编号_190+张图片!吐血整理!搞定R语言基础绘图全部知识点
- 【ARM】IMX6UL串口通信