#include<opencv2/highgui/highgui.hpp> #include<opencv2/imgproc/imgproc.hpp> #include<opencv2/objdetect.hpp> #include<iostream> using namespace std; using namespace cv; int main(int argc, char **argv) { Mat img; //读取图片 img = imread("D:\\b.png", 1); //HOG特征检测器 HOGDescriptor defaultHog; //设置SVM分类器 defaultHog.setSVMDetector(HOGDescriptor::getDefaultPeopleDetector()); //矩形框数组 vector<Rect> found; //对图像进行多尺度检测 defaultHog.detectMultiScale(img, found); //detectMultiScale(const Mat& image,CV_OUT vector<Rect>& objects,double scaleFactor = 1.1,int minNeighbors = 3,int flags = 0,Size minSize = Size(),Size maxSize = Size()); //待检测图片,被检测物体的矩形框向量组,搜索窗口的比例系数 //画出矩形框 for (int i = 0; i<found.size(); i++) { Rect r = found[i]; rectangle(img, r.tl(), r.br(), Scalar(0, 255, 0), 3); } //显示图片 namedWindow("Detect pedestrain", WINDOW_AUTOSIZE); imshow("Detect pedestrain", img); waitKey(0); return 0; }
小编菜鸟一枚,第一次接触opencv,opencv还没学完,导师就让研究行人检测。
在网上看到许多的大佬写的行人检测,大都是基于利用Hog进行特征提取和SVM分类器来进行行人检测,写的非常全,当然代码也就很复杂了。但小编这时完全不知道HOG和SVM是什么东西,opencv也没什么基础,C++也快忘完了。所以基本看不懂大神们写的长长的代码。
所以小编挑了一个代码最少,看起来最简单的C++程序。研究了几个小时,终于发现,行人检测原来核心代码只有两句。
第一句:defaultHog.setSVMDetector(HOGDescriptor::getDefaultPeopleDetector());这是设置分类器SVM。
第二句:defaultHog.detectMultiScale(img, found, 0, Size(8, 8), Size(32, 32), 1.05, 2);这是进行多尺度检测,用HOG。
所以小编写了段非常简单的代码,如上,就能实现简单的行人检测。
这里,小编简单的说说代码每一句是什么意思。
首先是vector。它是一个容器,能存放各种类型的对象。给大家举一个例子:
vector<int> test;
//建立一个vector,int为数组元素的数据类型,test为动态数组名(自己命名的)
想深入了解vector的小白们,以下附上详细介绍vector的链接:
https://blog.csdn.net/duan19920101/article/details/50617190/
然后,HOGDescriptor是一个类,HOG被封装在这个类中。
举个例子:
HOGDescriptor defaultHog ;
这就定义了HOG对象defaultHog(自己命名的)。
再给大家说说SVMDetector。
实例:
defaultHog.setSVMDetector(HOGDescriptor::getDefaultPeopleDetector());
就是调用setSVMDetector方法,给用于对HOG特征进行分类的SVM模型的系数赋值,这里的参数HOGDescriptor::getDefaultPeopleDetector()时,表示采用系统默认的参数。
接着,opencv中使用detectMultiScale()来进行多尺度检测。
defaultHog.detectMultiScale(img, found);
img是输入的待检测的图片的名字,found是检测到目标区域列表,都是自己命名的。
最后,rectangle函数,传入矩形参数来画矩形。
rectangle(Mat& img,Rect rec,const Scalar&color,int thickness=1,int shift=0);
实例:rectangle(img, Rect(100,300,20,200), Scalar(0, 0, 255), 1,1,0);
其中rectangle(int a,int b, int c, int d),a,b为矩形左上角坐标,c,d为矩形的长和宽。
scalar()表示颜色,后面的参数分别是线条粗细,线条类型,点类型。
好,总结一下,行人检测代码初步完成,但还是会有许多的bug。看下图就知道它的矩形框多了。说明代码还需要完善。等小编再去研究研究。
最后小编又参考了许多的文章,弄明白了行人检测的原理,对hog和SVM进行了初步的研究。大概知道它是什么,主要干啥的。
HOG是局部区域描述符,通过计算局部区域上的梯度方向直方图来构成人体特征。其实它就是用来采集人体特征的。
SVM是支持向量机,就是一种判别方法。小编看了一个故事,然后发现,SVM就是一条线,它可以把两个类别无错误的分隔开。
而行人检测原理,就是先用HOG采集出人体特征,再用SVM分类器分出行人和非行人。
根据小编的理解,就是用HOG采集出行人和非行人的特征,再根据特征的不同用SVM把行人和非行人分开。最后再画出矩形框把行人圈出来就行了。
小编还看到,许多的文章都说到了样本训练。这个代码用的是默认的参数,是opencv自带的。没有自己训练样本,所以代码很简单。
样本训练,小编还要再研究研究。还有HOG算子和SVM向量机的原理,小编也是一知半解,等小编去研究研究,先记着,以后再说。
相关推荐
OPENCV行人检测HOG+SVM检测视频中是否有人.zip资源matlab opencv运动目标检测程序资料OPENCV行人检测HOG+SVM检测视频中是否有人.zip资源matlab opencv运动目标检测程序资料OPENCV行人检测HOG+SVM检测视频中是否有人....
OpenCV行人检测4(HOG+SVM)是一个利用计算机视觉技术进行行人检测的教程,它主要依赖于两种关键算法:Histogram of Oriented Gradients (HOG) 和 Support Vector Machines (SVM)。在这个主题中,我们将深入探讨这两...
本项目聚焦于使用C++编程语言实现基于HOG(Histogram of Oriented Gradients,方向梯度直方图)特征和SVM(Support Vector Machine,支持向量机)分类器的行人检测算法。下面将详细解释HOG特征提取、SVM模型训练以及...
OPENCV行人检测HOG+SVM检测视频中是否有人 OPENCV行人检测HOG+SVM检测视频中是否有人 OPENCV行人检测HOG+SVM检测视频中是否有人 OPENCV行人检测HOG+SVM检测视频中是否有人 OPENCV行人检测HOG+SVM检测视频中是否有人
这种方法特别适合于检测行人的轮廓和姿态,因为它能够捕捉到人体边缘和结构的关键信息。 SVM是一种监督学习模型,用于分类和回归分析。在行人检测中,SVM被用作分类器,训练出一个模型来区分行人和非行人图像块。...
在这个特定的案例中,"hog.svm_hog_hogsvm_HOG+SVM_SVM小狮子_hog+SVM_"标题暗示了我们正在处理的是一个针对小狮子的分类任务。小狮子的图像可能具有丰富的纹理和形状变化,这使得HOG特征尤为适用。 在"hog.svm.py...
通过这个过程,我们可以构建一个基于HOG+SVM的图像分类系统,例如行人检测。OpenCV提供了方便的接口,使得开发者能够快速实现这一技术。需要注意的是,实际应用中还需要考虑优化和调参,以适应不同的应用场景和需求...
本项目专注于使用Python实现行人检测,结合HOG(Histogram of Oriented Gradients)特征和SVM(Support Vector Machine)分类器进行训练和检测。下面将详细介绍这两个核心技术以及如何将它们结合应用于行人检测。 ...
HOG+SVM算法由Navneet Dalal和Bill Triggs在2005年的CVPR会议上提出,成为行人检测领域的里程碑式算法。HOG,即Histogram of Oriented Gradients,是一种用于特征提取的技术,它通过计算和积累图像中像素块的梯度...
标题 "opencv视频行人检测1(HOG+SVM)" 涉及到的是计算机视觉领域的一个经典应用,即使用OpenCV库进行行人检测。OpenCV是一个开源的计算机视觉和机器学习软件库,提供了丰富的功能来处理图像和视频数据。在这个项目...
以上就是根据给定文件信息所能提取到的关于OpenCV目标跟踪、行人检测以及HOG+SVM在视频中检测行人存在的知识点。这些技术的结合为计算机视觉领域的实时监控和智能分析提供了强大的技术支持。随着技术的发展和改进,...
在"opencv视频行人检测2(HOG+SVM)"这个主题中,我们将深入探讨如何使用OpenCV来实现行人检测,主要涉及的技术是Histogram of Oriented Gradients(HOG)特征和Support Vector Machines(SVM)分类器。 **HOG特征...
基于OpenCV 通过HOG+SVM训练INRIAPerson行人数据库进行行人检测源码+使用文档+全部资料(优秀项目)基于OpenCV 通过HOG+SVM训练INRIAPerson行人数据库进行行人检测源码+使用文档+全部资料(优秀项目) 【备注】 1、...
在HOG+SVM的应用中,OpenCV提供方便的接口来实现HOG特征的计算和SVM模型的训练与预测。 综上所述,HOG+SVM的结合是计算机视觉领域中的一个强大工具,尤其在目标检测任务中表现出高效率和准确性。OpenCV库为开发者...
标题中的“自己hog+svm训练过程”指的是使用Histogram of Oriented Gradients (HOG) 特征和Support Vector Machine (SVM) 分类器进行行人检测的实践过程。HOG特征是计算机视觉领域中用于物体检测,特别是行人检测的...
标题中的“HOG+SVM实现数字识别”是指利用Histogram of Oriented Gradients(方向梯度直方图)特征和Support Vector Machines(支持向量机)算法进行数字的检测与识别。这一技术常应用于图像处理和计算机视觉领域,...
标题中的“hog+svm行人检测分类器训练”指的是在计算机视觉领域中,使用Histogram of Oriented Gradients(HOG)特征和Support Vector Machines(SVM)算法进行行人检测的训练过程。HOG是一种用于物体检测的特征提取...
标题中的“HOG+SVM训练集和测试集分开写的”是指使用Histogram of Oriented Gradients(HOG)特征和Support Vector Machine(SVM)分类器进行物体检测时,将数据集划分为训练集和测试集两个部分。这种方法是机器学习...