OpenCV_基于HOG特征的行人检测

OpenCV中提供了HOG的行人检测(pedestrain detection)类。

cv::HOGDescriptor类的构造函数的各参数的定义:

CV_WRAP HOGDescriptor() :
    winSize(64,128),                            // detect window
    blockSize(16,16),                            // block 大小
    blockStride(8,8),                            // overlap block的滑动步长
    cellSize(8,8),                              // cell 大小 
    nbins(9),                                    // 直方图的bin个数
    derivAperture(1),                            // 微分算子核
    winSigma(-1),                                // 在window上进行高斯加权
    histogramNormType(HOGDescriptor::L2Hys),    // 直方图归一化类型
    L2HysThreshold(0.2),                        // L2-norm followed by clipping (limiting the maximum values of v to 0.2) and renormalising
    gammaCorrection(true),                      // Gamma校正,去除光照影响
    nlevels(HOGDescriptor::DEFAULT_NLEVELS)      // 分层数

下面的两段代码采用OpenCV中的HOG行人检测类来完成对静态图片中的行人检测。

1)采用64*128 (像素为单位)的detect window

//  基于HOG特征的行人检测 
//  Author: http://blog.csdn.net/icvpr 

#include <iostream>
#include <opencv2/opencv.hpp>


int main(int argc, char** argv)
{
 cv::Mat image = cv::imread("test.bmp");
 if (image.empty())
 {
  std::cout<<"read image failed"<<std::endl;
 }

 
 // 1. 定义HOG对象
 cv::HOGDescriptor hog; // 采用默认参数
 

 // 2. 设置SVM分类器
 hog.setSVMDetector(cv::HOGDescriptor::getDefaultPeopleDetector());  // 采用已经训练好的行人检测分类器

 // 3. 在测试图像上检测行人区域
 std::vector<cv::Rect> regions;
 hog.detectMultiScale(image, regions, 0, cv::Size(8,8), cv::Size(32,32), 1.05, 1);

 // 显示
 for (size_t i = 0; i < regions.size(); i++)
 {
  cv::rectangle(image, regions[i], cv::Scalar(0,0,255), 2);
 }

 cv::imshow("hog", image);
 cv::waitKey(0);

 return 0;
}

行人检测实验结果:

OpenCV_基于HOG特征的行人检测OpenCV_基于HOG特征的行人检测