资源简介
效果很好的行人检测程序 opencv hog SVM
代码片段和文件信息
/*#include
#include
#include
#include
#include
#include “opencv2/nonfree/features2d.hpp“
#include
#include
using namespace cv;
using namespace std;
int main(int argc char** argv)
{
//测试时间开始
double t;
t = getTickCount();
cv::Mat image = cv::imread(“D:\\行人检测\\正样本\\6.bmp“);
if (image.empty())
{
std::cout << “read image failed“ << std::endl;
}
// 1. 定义HOG对象
cv::HOGDescriptor hog(cv::Size(48 96) cv::Size(16 16) cv::Size(8 8) cv::Size(8 8) 9 1 -1 cv::HOGDescriptor::L2Hys 0.2 true cv::HOGDescriptor::DEFAULT_NLEVELS);
// 2. 设置SVM分类器
hog.setSVMDetector(cv::HOGDescriptor::getDaimlerPeopleDetector()); // 采用已经训练好的行人检测分类器
// 3. 在测试图像上检测行人区域
std::vector regions foundRect;
hog.detectMultiScale(image regions 0 cv::Size(8 8) cv::Size(8 8) 1.05 2);
//以下为减少嵌套
for (int i = 0; i < regions.size(); i++){
cv::Rect r = regions[i];
int j = 0;
for (; j < regions.size(); j++){
if (j != i && (r & regions[j]) == r)
break;
}
if (j == regions.size()){
foundRect.push_back(r);
}
}
// 显示
for (size_t i = 0; i < regions.size(); i++)
{
cv::rectangle(image regions[i] cv::Scalar(0 0 255) 2);
}
cv::imshow(“hog“ image);
//统计所用时间
t = getTickCount() - t;
t = t * 1000 / getTickFrequency();
cout << “运行时间:“ << t / 1000 << “s“ << endl;
cv::waitKey(0);
return 0;
}*/
#include
#include
#i
评论
共有 条评论