38 Opencv HOG特征检测

文章目录

  • [HOGDescriptor 构造函数](#HOGDescriptor 构造函数)
  • [setSVMDetector 设置支持向量机(SVM)检测器,用于目标检测。](#setSVMDetector 设置支持向量机(SVM)检测器,用于目标检测。)
  • [compute 用于计算图像区域的HOG描述符。](#compute 用于计算图像区域的HOG描述符。)
  • [detectMultiScale 多尺度检测目标。](#detectMultiScale 多尺度检测目标。)
  • 示例

HOGDescriptor 构造函数

c 复制代码
HOGDescriptor();
HOGDescriptor(const Size& _winSize, const Size& _blockSize, 
              const Size& _blockStride, const Size& _cellSize, 
              int _nbins, double _alpha, double _L2HysThreshold,
              bool _gammaCorrection, NHistType _histogramNormType);
              
    _winSize: 指定窗口大小,默认是 64x128 像素。
    _blockSize: 指定块的大小,默认是 16x16 像素。一个块由多个单元格(cell)组成。
    _blockStride: 指定在计算下一个块时块之间滑动的步长,默认是 8x8 像素。
    _cellSize: 指定每个单元格的大小,默认是 8x8 像素。每个单元格内的像素点将被用来计算梯度直方图。
    _nbins: 指定每个单元格中梯度方向的数量,默认是 9 个bin。
    _alpha: 权重缩放因子,通常设置为 1.0。
    _L2HysThreshold: L2 范数阈值,用于防止光照变化影响。默认值通常是 0.2。
    _gammaCorrection: 是否应用伽马校正预处理。默认是 false。
    _histogramNormType: 直方图归一化类型。

setSVMDetector 设置支持向量机(SVM)检测器,用于目标检测。

c 复制代码
void setSVMDetector(vector<float> detector)
detector: SVM权重向量,可以通过训练获得或使用OpenCV提供的默认检测器。

compute 用于计算图像区域的HOG描述符。

c 复制代码
void compute(InputArray img, vector<float>& descriptors, 
             const Size winStride=Size(), const vector<Point>& locations=vector<Point>()); 
    img: 输入图像,应该为灰度图像。
    descriptors: 输出的HOG描述符。
    winStride: 窗口滑动步长。
    locations: 指定需要计算的特定位置。

detectMultiScale 多尺度检测目标。

c 复制代码
void detectMultiScale(Mat image, vector<Rect>& foundLocations, 
                      double hitThreshold=0, Size winStride=Size(),
                      Size padding=Size(), double scale=1.05, int finalThreshold=2,
                      bool useMeanshiftGrouping=false)
                      
    image: 输入图像。
    foundLocations: 输出矩形框列表,表示检测到的目标位置。
    hitThreshold: 决定检测是否成功的阈值。
    winStride: 滑动窗口的步长。
    padding: 检测窗口的填充大小。
    scale: 图像金字塔的比例因子。
    finalThreshold: 需要的邻居数量。
    useMeanshiftGrouping: 是否使用均值漂移分组来合并候选矩形框。

示例

c 复制代码
#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main(int argc, char** argv) {
    // 读取图像文件 "D:/vcprojects/images/HOGV.png" 到 Mat 对象 src 中
    Mat src = imread("D:/vcprojects/images/HOGV.png");
    
    // 如果图像加载失败,则输出错误信息并返回 -1 终止程序
    if (src.empty()) {
        printf("could not load image...\n");
        return -1;
    }
    
    // 创建一个名为 "input image" 的窗口,大小根据图像自动调整
    namedWindow("input image", CV_WINDOW_AUTOSIZE);
    
    // 在 "input image" 窗口中显示图像 src
    imshow("input image", src);

    
    // 初始化 HOGDescriptor,默认设置用于检测人的SVM检测器
    HOGDescriptor hog = HOGDescriptor();
    hog.setSVMDetector(hog.getDefaultPeopleDetector());

    // 定义一个向量 foundLocations 来存储检测到的人体矩形框的位置
    vector<Rect> foundLocations;
    
    // 使用 detectMultiScale 函数在图像 src 中查找人体
    // 参数解释:输入图像、输出矩形框列表、检测阈值、窗口滑动步长、最小窗口尺寸、搜索窗口每次迭代的增长率、需要的邻居数量
    hog.detectMultiScale(src, foundLocations, 0, Size(8, 8), Size(32, 32), 1.05, 2);
    
    // 复制源图像到结果图像 result 中,以便可以在上面绘制检测到的对象
    Mat result = src.clone();
    
    // 遍历所有检测到的矩形框,在结果图像上绘制红色边框
    for (size_t t = 0; t < foundLocations.size(); t++) {
        rectangle(result, foundLocations[t], Scalar(0, 0, 255), 2, 8, 0);
    }
    
    // 创建一个名为 "HOG SVM Detector Demo" 的窗口来显示检测结果
    namedWindow("HOG SVM Detector Demo", CV_WINDOW_AUTOSIZE);
    
    // 在 "HOG SVM Detector Demo" 窗口中显示带有矩形框的结果图像
    imshow("HOG SVM Detector Demo", result);

    // 等待用户按键事件,参数为0表示无限期等待
    waitKey(0);
    
    // 正常退出程序
    return 0;
}
相关推荐
百泰派克生物科技几秒前
串联质量标签(TMT)
人工智能·机器学习·蛋白质组学·蛋白质·质谱
草莓熊Lotso几秒前
Linux 实战:从零实现动态进度条(含缓冲区原理与多版本优化)
linux·运维·服务器·c++·人工智能·centos·进度条
渡我白衣1 小时前
多路转接之epoll:理论篇
人工智能·神经网络·网络协议·tcp/ip·自然语言处理·信息与通信·tcpdump
明月照山海-1 小时前
机器学习周报二十八
人工智能·机器学习
weixin_437497777 小时前
读书笔记:Context Engineering 2.0 (上)
人工智能·nlp
喝拿铁写前端7 小时前
前端开发者使用 AI 的能力层级——从表面使用到工程化能力的真正分水岭
前端·人工智能·程序员
goodfat7 小时前
Win11如何关闭自动更新 Win11暂停系统更新的设置方法【教程】
人工智能·禁止windows更新·win11优化工具
北京领雁科技7 小时前
领雁科技反洗钱案例白皮书暨人工智能在反洗钱系统中的深度应用
人工智能·科技·安全
落叶,听雪7 小时前
河南建站系统哪个好
大数据·人工智能·python
清月电子8 小时前
杰理AC109N系列AC1082 AC1074 AC1090 芯片停产替代及资料说明
人工智能·单片机·嵌入式硬件·物联网