随笔 - 632  文章 - 17  评论 - 54  阅读 - 93万

OpenCV使用HOGDescriptor实现行人检测

一、概述

  案例:使用HOGDescriptor实现行人检测

  实现步骤:

    1.载入图像

    2.图像灰度化

    3.实例化HOGDescriptor,并使用SVM检测器来检测行人

    4.使用detectMultScale在不同的尺度空间上实现行人检测

    5.将4中检测到的行人矩形框绘制出来,并输出最终结果

  在多尺度空间检测的API介绍:

复制代码
detectMultiScale(InputArray img, CV_OUT std::vector<Rect>& foundLocations,
                                  double hitThreshold = 0, Size winStride = Size(),
                                  Size padding = Size(), double scale = 1.05,
                                  double finalThreshold = 2.0, bool useMeanshiftGrouping = false)
img:输入的灰度图像
foundLocations:检测结果(行人外接矩形)
hitThreshold:特征与SVM分类平面之间距离的阈值。通常为0,应在检测器系数中指定(作为最后一个自由系数)
winStride:窗口步长
padding:填充
scale:检测窗口增加的比例系数
finalThreshold:最终阀值,默认2.0
useMeanshiftGrouping:分组算法,默认false,一般不用,因为速度较慢
复制代码

  ps:一般情况下detectMultiScale使用默认参数就行

  

二、代码示例

复制代码
Mat src = imread(filePath);
    if(src.empty()){
        qDebug()<<"图像为空";
        return;
    }
    Mat gray;
    cvtColor(src,gray,COLOR_BGR2GRAY);

    //hog+svm实现行人检测
    HOGDescriptor hog = HOGDescriptor();
    hog.setSVMDetector(hog.getDefaultPeopleDetector());//使用hog svm实现行人检测
    //多尺度空间检测
    vector<Rect> foundLocations;//检测到行人的矩形区域
    hog.detectMultiScale(src,foundLocations);//后面的参数使用默认就行,这是opencv的经验值
//    hog.detectMultiScale(src, foundLocations, 0, Size(1, 1), Size(8, 8), 1.05, 2);
    //将行人矩形框绘制出来
    Mat result = src.clone();
    for(size_t i =0;i<foundLocations.size();i++){
        rectangle(result,foundLocations[i],Scalar(0,0,255),2,8,0);
    }
    imshow("result",result);
    pixmap = imageutils::matToQPixmap(result);
    label->setPixmap(pixmap.scaled(this->size(),Qt::KeepAspectRatio,Qt::SmoothTransformation));
复制代码

 

三、图片演示

 

posted on   飘杨......  阅读(623)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示