如何利用hog特征 matlab进行目标跟踪

 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
基于HOG的人体跟踪算法的研究及应用
下载积分:1500
内容提示:基于HOG的人体跟踪算法的研究及应用
文档格式:PDF|
浏览次数:48|
上传日期: 10:28:05|
文档星级:
该用户还上传了这些文档
基于HOG的人体跟踪算法的研究及应用
官方公共微信1图像异常检测算法  当今社会是一个人口密集、高度复杂和流动性大的社会,面临的突发事件和异常事件越来越多,其监控的难度和重要性也越来越突出。现有的视频监控系统大多数只是对场景内运动目标的监测和跟踪,进行进一步识别与行为理解等很少。虽然人们不断建造越来越大的视频监控系统,但这些监控系统仍只是提供事后取证录像的工具。  然而,监控的目的就是对监视场景中的异常事件或监控对象的行为进行检测与分析。而在长时间视频序列中采用人工的方法处理此类工作既不实用也不经济,因此在视频序列中利用计算机进行视频智能自动检测就显得十分重要。  据了解,就目前较成熟的视频异常行为智能检测包括双向越界、单向越界、进入禁区、离开禁区、徘徊、无人值守、骤变、人员聚集、烟雾检测、快速运动、逆行、打架等事件。而异常行为检测的实现方法通常有两类:1、把小概率行为或与先验规则相反的行为看作异常行为。2、把与已知正常行为的模式不匹配的行为看作异常行为。  核心算法  智能视频分析技术对异常事件进行分析需要核心的算法和技术做支撑,这些核心算法包括:(1)&将人类行为进行建模的虚拟现实的技术;(2)3D建模技术,通过对摄像机场景的实际参照标定构建场景的三维模型,从而能够准确计算出场景中任意物体的高度及任意两点之间的距离,为威胁目标分析提供准确的依据;(3)基于对象的标签分类,能够准确区分人、交通工具和其他对象;(4)基于环境变化的自学习自适应,理解和鉴别行为模式,自学习自适应环境,内置多种环境模型(街道、围墙、水面、雨雪雾天气等等),能够根据环境的变化自动调节;(5)自检测自保护,在环境能见度低、视场受阻、摄像机角度偏移、视频信号故障、低信号或无信号等异常情况时,立即发出报警;(6)敏感度自适应,根据场景环境持续自学习和自调节参数,确保外部敏感度自适应能力达到7×24全天候(在各种恶劣环境和照明条件下提供高可靠性的检测,无需外部人工干预调节)。相关技术如下:  图像异常检测算法  (1)图像信号丢失、被遮挡:检测图像方差。如果方差很小,可以认为图像丢失或者镜头被盖住等现象发生。(2)相机被扭转到新方向:&通过和指定背景进行比对来检测是否发生扭转。(3)图像信号质量下降,如有大量噪点,周期性干扰(横纹等):对帧差信号进行方差、FFT分析。  图像增强算法  (1)超分辨率技术,就是使用多张同一物体的低分辨率图像整合成一张高分辨率图像。现在主要应用在公安侦破案件上。例如还原一张较为模糊的车牌或者人脸等。(2)对比度增强、去雾化技术。对于一些“雾蒙蒙”的图像,可以简单地通过直方图平衡或者通过对颜色中的散射成分进行过滤从而提高图像的“清晰度”。应该注意到这些技术手段并没有从源头增强有用信号,而是选取了适合人眼观测习惯的表达方式。所以这些过滤后的信号适合提供给监控人员观看,而不是作为智能视频监控系统的输入。(3)防抖动技术。相机抖动通常是由风吹而引起。在采用长焦镜头的时候,图像抖动更为明显。防抖动有两种思路,&一种是对检测到的抖动进行平滑;另外一种就是争取将图像象钉子钉住一样一动不动。前一种技术适合过滤给监控人员直接观看的信号,后一种是智能视频分析系统所需要的。主流的基于背景建模的运动检测方法需要稳定的输入信号,否则容易在对比强烈的边缘等处产生误报警。  运动检测算法  (1)固定相机的运动检测:这是主流应用。通常是通过将当前帧和背景模型之间进行比对,发现的差异作为可能的运动物体输入给跟踪模块。算法的差异主要集中在背景模型如何建立,选择何种特征进行前景和背景的比对。混合高斯是经典的背景模型,简单,有一定的自适应性,现在市场上的产品主要采用此方法。在一些特殊场合,例如水面波浪,树枝摆动等场景,混合高斯不一定可以有效处理。这时候就需要采用动态背景或者其他技术手段来更好地进行背景建模,代价是计算量大大增加。采用像素灰度值作为特征进行比对是主流应用。出于过滤阴影、提高信噪比的考虑,也可以使用彩色像素值,但是数据量增大很多。另外也有采用纹理、梯度等特征进行前景、背景比对的。它们对光照突变、阴影不敏感,有助于消除误报警。(2)运动相机(云台)的运动检测:据了解,目前在国内安防领域还没有商业应用。在国外的一些高端监控系统和实验系统上已经有一些尝试。主要是和云台跟踪相配合,甚至是多云台相机之间的配合中采用此技术。  跟踪技术  (1)单目标跟踪技术:单目标跟踪本质上就是定义、提取目标特征,并预测最新待选区域及目标特征,进而通过寻找匹配极值来锁定目标的过程。目标特征可以选用像素值,Blob几何特征,像素分布特征(直方图、HOG等),目标的预测、更新过程可以靠Kalman滤波、粒子滤波等过程来驱动。寻找最佳匹配可以通过Camshift,甚至穷尽搜索等方法。(2)多目标跟踪技术:简单地使用“贪婪”匹配就可以完成大多数运动物体的跟踪。但是有时候会出现多个物体和多个Blobs匹配的情况。这时候要按照全局优化的原则来完成多对多的匹配。(3)云台相机的跟踪技术:云台相机跟踪最大的难度来源于运动物体的缩放以及模型的更新。&即使是同一物体,在镜头拉近拉远情况下物体的形态、颜色等特征有很大的差别。容易造成在缩放过程中丢失对运动物体的跟踪。在物体大小基本保持不变的情况下,现在有Camshift,HOG等较为有效的跟踪手段。(4)计数:计数的技术基础是跟踪。难度主要来源于较为拥挤情况下,尤其是对Blob融合、分割需要考虑周全。  模式识别技术  (1)目标分类技术:主要是识别运动物体是人、人群、自行车(助力车)、汽车还是噪声等种类。典型的手段是通过训练对目标种类形成一些模型定义,然后将新发现的运动物体与模型比对。通用的方法有支持向量机、决策树、神经网络等。当然在上述常见的种类之外,用户可以指定某种特殊物体,如渣土车等,在完成专门训练后就可以进行有针对性的检测。  (2)行为识别技术:主要是识别打架、奔跑、跌倒、徘徊、哨兵离岗等简单异常行为。&也可能是收银员的异常操作等较为复杂的行为。主要算法可以是非常有针对性的特定行为的检测;也可以较为通用的方法,如隐形马尔科夫过程等。(3)&车牌识别、集装箱号识别:由于实际应用时间较长,这类技术相对于上述技术而言更成熟些。通常采用决策树、神经网络或者组合技术。2应用力求突破  应用力求突破  在平安城市建设的推动下,安防视频监控应用日趋普及。随着智能化技术的普及使用,市场渐渐不再满足于现有的智能视频分析技术种类,而是寻求更新的算法、更丰富的业务应用、更整体化的系统应用,力求实现在应用的广度、深度上的突破。为此,安防行业已经开始进行对新一代智能视频分析技术的研究,提出了一些新的产品形态、新的应用模式、新的系统架构。这些新技术、新产品正在逐渐与市场结合,探求新的发展空间。  一些厂家将一些简单的功能,如跨线、区域入侵、人脸检测等算法直接嵌入到芯片中,从而降低相关产品的开发门槛,进而推动智能视频分析的分布式应用,对网络带宽占用、视频存储空间的降低等方面均会有一定的改观。  面临问题  目前来看,虽然近年智能视频分析技术迅速发展,应用范围也在不断扩展,市场上已经有了网络监控的各种产品,如网络摄像机、网络矩阵等,但由于这些产品的质量还有待提高,图像看起来有明显的延迟、跳动、不够清晰等缺陷,由于硬件本身性能不够稳定,易出现死机、重启、误漏报等问题。而智能视频分析本身算法的局限,在理想环境下才可实现其全部功能,所以在实际应用中,只能初步实现较简单的功能。目前智能视频分析主要面临以下几个方面问题:  第一是技术层面:室外夜间光照不足、恶劣天气、图像处理、网络传输链路带宽受限等因素造成图像质量下降,给安防智能视频分析带来先天困难;目标与背景相似或背景杂乱等导致目标分割以及特征信息提取困难;针对复杂异常行为、事件建模困难,相应的智能分析算法识别性能不高。上述因素容易造成虚假报警、漏报警、跟踪困难等不良后果,制约了智能视频分析应用系统实战性能的提升。  第二是产业层面:主要的困惑还是客户对智能视频分析产品的过高期望与该技术的性能表现易受使用条件的限制。由于用户对智能分析这类产品接触不多,对这类产品的效果有疑问。而有的厂家为了能够吸引客户进行夸大宣传,结果实际使用效果与宣传效果不符,使得这些客户对智能视频分析产品再无好感。厂商对产品大部分用户没有认真梳理应用需求;产品研发部门缺乏对安防行业的深入理解,导致智能视频分析产品功能千遍一律,缺乏针对性。再者,缺少权威的标准认证体系,导致用户对产品的性能无法有效把控。  第三是市场层面:目前很多智能视频分析产品多是自主研发,而这类企业就需要摊薄早期的开发成本。因此,这类产品在定价方面可能要高于一般客户的承受能力,这也就决定了智能分析产品尤其是行为分析产品只能在监狱、高档小区或者机关重地等具有严格、精准监控需求的地方。  只有开展基础、共性的关键技术攻关,为突破智能视频分析深度应用创造条件;做好典型项目的示范作用,引导用户从管理流程上重视智能视频分析提供的信息;深化行业的智能应用,建立“研发+集成商+行业用户”的合作机制,为研发和应用提供一个互动平台;加快制定标准和规范,提高智能视频分析产品性能鉴定的权威性和可操作性,才能为智能视频分析应用推广“保驾护航”,智能视频分析也才能在更多行业、领域得到应用。  智能视频分析作为一项仍在不断发展与完善的新技术,如果企业不能迅速建立自己独具特色的核心竞争力和核心产品,想要取得市场的话语权和持续性的发展不是一件容易的事情。目前智能视频分析技术仍处于成长阶段,最大的挑战其实还是来自于技术,这是一个需要能够静下来专心研究做产品和价值的行业,作为产业链底层的技术供应商,最终还是需要靠产品说话。作为视频监控未来发展的必然方向,智能化虽然现在还存在一些问题,但随着计算机技术以及智能技术的发展,这些问题都会得到很好的解决,智能化视频技术将得到更为广泛的应用。&
天津重庆哈尔滨沈阳长春石家庄呼和浩特西安太原兰州乌鲁木齐成都昆明贵阳长沙武汉郑州济南青岛烟台合肥南京杭州东莞南宁南昌福州厦门深圳温州佛山宁波泉州惠州银川
本城市下暂无经销商
其他小论坛精选
下载中关村在线Android 客户端
下载中关村在线 iPhone 客户端
下载中关村在线Windows8客户端
成为中关村在线微信好友
4744054806250007285083309199105800计算机视觉中,目前有哪些经典的目标跟踪算法?
我所知道的有tld、compressive tracking、struck。还望补充!
我大三(09年)开始做跟踪方面的事情,到毕业工作之后两年陆续还会做一些跟踪相关的问题。跟踪是一个很混乱的方向。比如TLD、CT、Struct这些效果不错的Tracker其实都不是单纯的Tracker了。09年的时候我记得比较流行的是Particle Filtering, 或者一些MeanShift/CamShift的变形,比如特征变了,比如对问题的假设变了。后来突然出现一些tracking by detection的方法,之前的很多朋友就觉得这是耍流氓。比如TLD,严格的跟踪算法也许只是里面的Forward/Backward Opitcal Flow的部分,但是效果很Impressive,所以不管怎样,一下就火了。之后所谓的跟踪就不再是一个传统的跟踪问题,而是一个综合的工程问题。online learning,random projection ,sparse learning的东西都加进来,大家其实到底是在做跟踪还是在做检测或者online learning,其实已经不重要,因为衡量的标准是你在某些public dataset上的精度。但这些对实际的项目有没有帮助呢?这是个很有意思的地方,在很多时候,我们之所以需要跟踪算法,是因为我们的检测算法很慢,跟踪很快。基本上当前排名前几的跟踪算法都很难用在这样的情况下,因为你实际的速度已经太慢了,比如TLD,CT,还有Struct,如果目标超过十个,基本上就炸了。况且还有些跟踪算法自己drift掉了也不知道,比如第一版本的CT是无法处理drift的问题的,TLD是可以的,究其原因还是因为检测算法比较鲁棒啊……实际中我觉得速度极快,实现也简单的纯跟踪算法居然是NCC和Overlap。NCC很简单,这个是对点进行的,对于区域也有很多变种,网上有一些相关的资源。Overlap是我取的名字,一般用在视频里面,假如你的摄像头是静止的,背景建模之后出来的前景可以是一个一个的blob,对相邻两帧的blob检测是否Overlap就可以得到track。在一些真实场景下,这个算法是非常有效的。关于背景template的问题在真实的视频里面也是很好解决的。坐在电脑前面调试代码tuning 各种阈值让跟踪算法在某一个视频帧下面不要drift的事情我是再也不想干了。以上说的跟踪是指给定一个视频帧中的物体区域,然后跟踪住这个物体。其他地方也有一些跟踪,比如SLAM里,但是问题域不一样。略去。
benchmark 2015版: 不过这些算法都比较新 要看老的话主要是06年这篇paper
和09年有一篇暂时忘记paper名字了古老的方法比如optical flow,kalman filter(后面的particle filter)……了解不多不瞎扯了目前tracking主要是两种,discriminative 和 generative,当然也有combine两个的比如SCM。你提到的都是前者,就是算法里面基本有一个classifier可以分辨要追踪的物体。这类除了你说的最近比较火的还有速度极占优势的CSK(后来进化成KCF/DCF了)另一种generative的方法,大致就是用模版(或者sparse code)抽一堆feature,按距离函数来匹配。L1,ASLA,LOT,MTT都是。最近才开始了解tracking,所以说得可能并不是很对,仅供参考
欢迎来看看我们最近的打脸文: HOG+LR 轻轻松超过90%paper的结果Tracking这个坑太烂了,比Detection落后至少5年以上。我就不吐槽了
MIL,SCM,DCF,KCF,l1APG,等等好多。你可以看一下Wuyi的online benchmark那篇论文,里面讲了好多tracking的算法的对比~
KCF你值得拥有!-------------------------------------------------------在上课,下课回去吹!-------------------------------------------------------KCF全称,相关滤波kernel correlation filter 文章出处
这个是我现在主要看的算法,目标跟踪的算法是有很多了,如果想一个一个全部研究的话,可以在这里Benchmark,包含了现在流行的算法,并进行了分析,这就是目标跟踪算法的一个综述!
particle filter不应该是最经典跟踪算法之一吗
之前写过一些tracking的东西,把最近看的比较流量的算法写一下:个人觉得值得仔细研究的tracking算法包括:Mean-shift, Particle Filter, Ensemble TrackingTLD, 压缩感知跟踪,KCF Tracker及其改进速度慢于50fps的跟踪算法就没有必要搞了,基本上没有可能做到实时的。
既然问的经典算法,那就几乎可以毫不犹豫地回答camshift、meanshift、Kalman filter、Optical flow之类的了凡是低版本的OpenCV里面提供的函数,肯定用的都是最基础或者最经典的算法了。即使有些过时,但是作为ad hoc方案或者最底层的处理算法还是不错的。举两个我自己做过的例子Kalman filter:原本是想估算下云的速度,无意中发现了一架战斗机。。。红圈里面的出现中途中途飞离飞离Optical flow追踪车辆:追踪绿色区域也就是四个路口的车辆通过情况并计数。追踪绿色区域也就是四个路口的车辆通过情况并计数。主要追踪算法就是optical flow当然preprocessing以及其他辅助算法也是需要的。左图就是背景抽离+区块融合的中间效果。右图是实时追踪的效果。
deep learning tracking 效果不错,就是太慢了,目前难实时。@Naiyan Wang
基于PF和Optical flow的cmt在实际中表现很好,可以和MDP结合做到工业级别的应用。最近准备研究大神的新作:Learning to Track at 100 FPS with Deep Regression Networks 相关代码:初看下来的感想就是,反正DL就是什么领域都能玩啊……LOL
已有帐号?
无法登录?
社交帐号登录树莓PI远程控制摄像头请参考前文:/yuliyang/p/3561209.html
参考:http://answers.opencv.org/question/133/how-do-i-access-an-ip-camera/
/work/opencv-hog-peopledetector-trainning.html
项目环境:opencv2.8& ,debian, QT
yuliyang@debian-yuliyang:~/build-peopledetect-桌面-Debug$ ./peopledetect& /home/yuliyang/OLTbinaries/INRIAPerson/HOG/model_4BiSVMLight.alt
model_4BiSVMLight.alt文件是INRIAPerson行人检测库HOG文件夹下的modle文件
#include &fstream&
#include &iostream&
#include &vector&
#include &stdio.h&
#include &string.h&
#include &ctype.h&
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/objdetect/objdetect.hpp"
#include "opencv2/highgui/highgui.hpp"
vector&float& load_lear_model(const char* model_file)
vector&float&
if ((modelfl = fopen (model_file, "rb")) == NULL)
cout&&"Unable to open the modelfile"&&
char version_buffer[10];
if (!fread (&version_buffer,sizeof(char),10,modelfl))
cout&&"Unable to read version"&&
if(strcmp(version_buffer,"V6.01"))
cout&&"Version of model-file does not match version of svm_classify!"&&
// read version number
int version = 0;
if (!fread (&version,sizeof(int),1,modelfl))
cout&&"Unable to read version number"&&
if (version & 200)
cout&&"Does not support model file compiled for light version"&&
long kernel_
fread(&(kernel_type),sizeof(long),1,modelfl);
{// ignore these
long poly_
fread(&(poly_degree),sizeof(long),1,modelfl);
double rbf_
fread(&(rbf_gamma),sizeof(double),1,modelfl);
fread(&(coef_lin),sizeof(double),1,modelfl);
double coef_
fread(&(coef_const),sizeof(double),1,modelfl);
fread(&l,sizeof(long),1,modelfl);
char* custom = new char[l];
fread(custom,sizeof(char),l,modelfl);
fread(&(totwords),sizeof(long),1,modelfl);
{// ignore these
fread(&(totdoc),sizeof(long),1,modelfl);
fread(&(sv_num), sizeof(long),1,modelfl);
double linearbias = 0.0;
fread(&linearbias, sizeof(double),1,modelfl);
if(kernel_type == 0) { /* linear kernel */
/* save linear wts also */
double* linearwt = new double[totwords+1];
int length =
fread(linearwt, sizeof(double),totwords+1,modelfl);
for(int i = 0;i&i++){
float term = linearwt[i];
detector.push_back(term);
float term = -
detector.push_back(term);
cout&&"Only supports linear SVM model files"&&
fclose(modelfl);
void help()
"\nDemonstrate the use of the HoG descriptor using\n"
HOGDescriptor::hog.setSVMDetector(HOGDescriptor::getDefaultPeopleDetector());\n"
"Usage:\n"
"./peopledetect (&image_filename& | &image_list&.txt)\n\n");
int main(int argc, char** argv)
cap.open("http://192.168.1.102:8001/?action=stream?dummy=param.mjpg");//在浏览器里输入http://192.168.1.102:8001/?action=stream
cap.set(CV_CAP_PROP_FRAME_WIDTH, 320);
cap.set(CV_CAP_PROP_FRAME_HEIGHT, 240);
if (!cap.isOpened())
return -1;
FILE* f = 0;
char _filename[1024];
if( argc != 3 )
cout&&"ERROR"&&
img = imread(argv[1]);
if( img.data )
strcpy(_filename, argv[1]);
f = fopen(argv[1], "rt");
fprintf( stderr, "ERROR: the specified file could not be loaded\n");
return -1;
//hog.setSVMDetector(HOGDescriptor::getDefaultPeopleDetector());
vector&float& detector = load_lear_model(argv[1]);
hog.setSVMDetector(detector);
namedWindow("people detector", 1);
while (true)
if (!img.data)
vector&Rect& found, found_
hog.detectMultiScale(img, found, 0, Size(4,4), Size(0,0), 1.05, 2);
for (i=0; i&found.size(); i++)
Rect r = found[i];
for (j=0; j&found.size(); j++)
if (j!=i && (r & found[j])==r)
if (j==found.size())
found_filtered.push_back(r);
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.06);
r.height = cvRound(r.height*0.9);
rectangle(img, r.tl(), r.br(), cv::Scalar(0,255,0), 2);
imshow("people detector", img);
if (waitKey(20) &= 0)
char* filename = _
if(!fgets(filename, (int)sizeof(_filename)-2, f))
//while(*filename && isspace(*filename))
if(filename[0] == '#')
int l = strlen(filename);
while(l & 0 && isspace(filename[l-1]))
filename[l] = '\0';
img = imread(filename);
printf("%s:\n", filename);
if(!img.data)
fflush(stdout);
vector&Rect& found, found_
double t = (double)getTickCount();
// run the detector with default parameters. to get a higher hit-rate
// (and more false alarms, respectively), decrease the hitThreshold and
// groupThreshold (set groupThreshold to 0 to turn off the grouping completely).
hog.detectMultiScale(img, found, 0, Size(8,8), Size(32,32), 1.05, 2);
t = (double)getTickCount() -
printf("tdetection time = %gms\n", t*1000./cv::getTickFrequency());
for( i = 0; i & found.size(); i++ )
Rect r = found[i];
for( j = 0; j & found.size(); j++ )
if( j != i && (r & found[j]) == r)
if( j == found.size() )
found_filtered.push_back(r);
for( i = 0; i & found_filtered.size(); i++ )
Rect r = found_filtered[i];
// the HOG detector returns slightly larger rectangles than the real objects.
// so we slightly shrink the rectangles to get a nicer output.
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(), cv::Scalar(0,255,0), 3);
imshow("people detector", img);
int c = waitKey(0) & 255;
if( c == 'q' || c == 'Q' || !f)
fclose(f);
//#include "opencv2/imgproc/imgproc.hpp"
//#include "opencv2/objdetect/objdetect.hpp"
//#include "opencv2/highgui/highgui.hpp"
//#include &stdio.h&
//#include &string.h&
//#include &ctype.h&
//void help()
"\nDemonstrate the use of the HoG descriptor using\n"
HOGDescriptor::hog.setSVMDetector(HOGDescriptor::getDefaultPeopleDetector());\n"
"Usage:\n"
"./peopledetect (&image_filename& | &image_list&.txt)\n\n");
//int main(int argc, char** argv)
FILE* f = 0;
char _filename[1024];
if( argc == 1 )
printf("Usage: peopledetect (&image_filename& | &image_list&.txt)\n");
img = imread(argv[1]);
if( img.data )
strcpy(_filename, argv[1]);
f = fopen(argv[1], "rt");
fprintf( stderr, "ERROR: the specified file could not be loaded\n");
return -1;
hog.setSVMDetector(HOGDescriptor::getDefaultPeopleDetector());
namedWindow("people detector", 1);
char* filename = _
if(!fgets(filename, (int)sizeof(_filename)-2, f))
//while(*filename && isspace(*filename))
if(filename[0] == '#')
int l = strlen(filename);
while(l & 0 && isspace(filename[l-1]))
filename[l] = '\0';
img = imread(filename);
printf("%s:\n", filename);
if(!img.data)
fflush(stdout);
vector&Rect& found, found_
double t = (double)getTickCount();
// run the detector with default parameters. to get a higher hit-rate
// (and more false alarms, respectively), decrease the hitThreshold and
// groupThreshold (set groupThreshold to 0 to turn off the grouping completely).
hog.detectMultiScale(img, found, 0, Size(8,8), Size(32,32), 1.05, 2);
t = (double)getTickCount() -
printf("tdetection time = %gms\n", t*1000./cv::getTickFrequency());
for( i = 0; i & found.size(); i++ )
Rect r = found[i];
for( j = 0; j & found.size(); j++ )
if( j != i && (r & found[j]) == r)
if( j == found.size() )
found_filtered.push_back(r);
for( i = 0; i & found_filtered.size(); i++ )
Rect r = found_filtered[i];
// the HOG detector returns slightly larger rectangles than the real objects.
// so we slightly shrink the rectangles to get a nicer output.
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(), cv::Scalar(0,255,0), 3);
imshow("people detector", img);
int c = waitKey(0) & 255;
if( c == 'q' || c == 'Q' || !f)
fclose(f);
阅读(...) 评论()

我要回帖

更多关于 python hog特征 的文章

 

随机推荐