一、概述
OpenCV提供了一个基于HOG和SVM且经过训练的行人检测器。和级联分类器一样,可以用这个SVM分类器以不同尺度的窗口扫描图像,在完整的图像中检测特定物体。
1、代码参考
窗口步长决定了这个128×64的模板(getDefaultPeopleDetector()内置的是128×64大小的模板)在图像上移动的方式(这里是水平和垂直方向每次移动4个像素)。
步长越大,检测速度就越快(因为计算的窗口少),但是可能会丢失窗口之间的行人。填充图像参数只是为了在图像边框上添加一些像素,以便检测到图像边缘的行人。
SVM分类器的标准阈值是0(1表示正样本,-1表示负样本)。如果你要确保检测到的图片一定有一个人,可以提高阈值(这意味着提高检测准确度,但可能会漏掉一些人);反之,如果要确保检测到所有行人(即希望有较高的召回率),那就要降低阈值,但这样可能会有更多的错误结果。
另外有一点很重要,在完整的图像上使用分类器时,会在连续的位置上使用多个窗口,这样就会在正样本附近得到多个检测结果。当同一位置上有两个或两个以上矩形时,最好只保留一个。函数cv::groupRectangles可以把位置相近、大小相似的矩形