hog人体检测

opencv中的 HOGDescriptor 类

struct CV_EXPORTS_W HOGDescriptor  
{  
public:  enum { L2Hys=0 };  enum { DEFAULT_NLEVELS=64 };  CV_WRAP HOGDescriptor() : winSize(64,128), blockSize(16,16), blockStride(8,8),  cellSize(8,8), nbins(9), derivAperture(1), winSigma(-1),  histogramNormType(HOGDescriptor::L2Hys), L2HysThreshold(0.2), gammaCorrection(true),  nlevels(HOGDescriptor::DEFAULT_NLEVELS)  {}  CV_WRAP HOGDescriptor(Size _winSize, Size _blockSize, Size _blockStride,  Size _cellSize, int _nbins, int _derivAperture=1, double _winSigma=-1,  int _histogramNormType=HOGDescriptor::L2Hys,  double _L2HysThreshold=0.2, bool _gammaCorrection=false,  int _nlevels=HOGDescriptor::DEFAULT_NLEVELS)  : winSize(_winSize), blockSize(_blockSize), blockStride(_blockStride), cellSize(_cellSize),  nbins(_nbins), derivAperture(_derivAperture), winSigma(_winSigma),  histogramNormType(_histogramNormType), L2HysThreshold(_L2HysThreshold),  gammaCorrection(_gammaCorrection), nlevels(_nlevels)  {}  CV_WRAP HOGDescriptor(const String& filename)  {  load(filename);  }  HOGDescriptor(const HOGDescriptor& d)  {  d.copyTo(*this);  }  virtual ~HOGDescriptor() {}  CV_WRAP size_t getDescriptorSize() const;  CV_WRAP bool checkDetectorSize() const;  CV_WRAP double getWinSigma() const;  CV_WRAP virtual void setSVMDetector(InputArray _svmdetector);  virtual bool read(FileNode& fn);  virtual void write(FileStorage& fs, const String& objname) const;  CV_WRAP virtual bool load(const String& filename, const String& objname=String());  CV_WRAP virtual void save(const String& filename, const String& objname=String()) const;  virtual void copyTo(HOGDescriptor& c) const;  CV_WRAP virtual void compute(const Mat& img,  CV_OUT vector& descriptors,  Size winStride=Size(), Size padding=Size(),  const vector& locations=vector()) const;  //with found weights output  CV_WRAP virtual void detect(const Mat& img, CV_OUT vector& foundLocations,  CV_OUT vector& weights,  double hitThreshold=0, Size winStride=Size(),  Size padding=Size(),  const vector& searchLocations=vector()) const;  //without found weights output  virtual void detect(const Mat& img, CV_OUT vector& foundLocations,  double hitThreshold=0, Size winStride=Size(),  Size padding=Size(),  const vector& searchLocations=vector()) const;  //with result weights output  CV_WRAP virtual void detectMultiScale(const Mat& img, CV_OUT vector& foundLocations,  CV_OUT vector& foundWeights, double hitThreshold=0,  Size winStride=Size(), Size padding=Size(), double scale=1.05,  double finalThreshold=2.0,bool useMeanshiftGrouping = false) const;  //without found weights output  virtual void detectMultiScale(const Mat& img, CV_OUT vector& foundLocations,  double hitThreshold=0, Size winStride=Size(),  Size padding=Size(), double scale=1.05,  double finalThreshold=2.0, bool useMeanshiftGrouping = false) const;  CV_WRAP virtual void computeGradient(const Mat& img, CV_OUT Mat& grad, CV_OUT Mat& angleOfs,  Size paddingTL=Size(), Size paddingBR=Size()) const;  CV_WRAP static vector getDefaultPeopleDetector();  CV_WRAP static vector getDaimlerPeopleDetector();  CV_PROP Size winSize;  CV_PROP Size blockSize;  CV_PROP Size blockStride;  CV_PROP Size cellSize;  CV_PROP int nbins;  CV_PROP int derivAperture;  CV_PROP double winSigma;  CV_PROP int histogramNormType;  CV_PROP double L2HysThreshold;  CV_PROP bool gammaCorrection;  CV_PROP vector svmDetector;  CV_PROP int nlevels;  // evaluate specified ROI and return confidence value for each location  void detectROI(const cv::Mat& img, const vector &locations,  CV_OUT std::vector& foundLocations, CV_OUT std::vector& confidences,  double hitThreshold = 0, cv::Size winStride = Size(),  cv::Size padding = Size()) const;  // evaluate specified ROI and return confidence value for each location in multiple scales  void detectMultiScaleROI(const cv::Mat& img,  CV_OUT std::vector& foundLocations,  std::vector& locations,  double hitThreshold = 0,  int groupThreshold = 0) const;  // read/parse Dalal's alt model file  void readALTModel(std::string modelfile);  
};  

其中hog.setSVMDetector(HOGDescriptor::getDefaultPeopleDetector());得到svm的检测算子。

hog.detectMultiScale(img, found, 0, Size(8,8), Size(32,32), 1.05, 2);得到检测的结果。

人体检测代码:

vector getBodyArea(Mat rawFrame)
{vector foundRect,foundFilteredRect;HOGDescriptor peopleDectectHog;peopleDectectHog .setSVMDetector (HOGDescriptor::getDefaultPeopleDetector());//默认人体检测器peopleDectectHog.detectMultiScale (rawFrame ,foundRect, 0 ,Size(8,8),Size(32,32),1.05,2);size_t i,j;for(i=0;i


结果如下:


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部