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;
}
相关推荐
几两春秋梦_3 分钟前
PINN求解偏微分方程
人工智能·pytorch·python
蒸土豆的技术细节38 分钟前
vllm源码(一)
人工智能·自然语言处理
微凉的衣柜1 小时前
深度剖析 DeepSeek V3 技术报告:架构创新与卓越性能表现
人工智能·语言模型·大模型
量子位1 小时前
奥特曼年终总结,明确 AGI 如何实现,2025 奔向超级智能
人工智能
嘟嘟实验室1 小时前
FaceFusion3.1.1,deepfacelive模型使用教程,BUG修复,云端镜像支持
人工智能·python·macos·aigc·数字人·facefusion
夜半被帅醒1 小时前
什么是神经网络?神经网络的基本组成部分训练神经网络激活函数有哪些局限性和挑战
人工智能·深度学习·神经网络
Jackilina_Stone1 小时前
【HUAWEI】HCIP-AI-MindSpore Developer V1.0 | 第一章 神经网络基础( 1 人工神经网络 ) | 学习笔记
人工智能·神经网络·学习·hcip·huawei
伊织code1 小时前
CINN - 神经网络的编译器基础设施 [飞桨]
人工智能·神经网络·paddlepaddle·飞桨·编译·算子·cinn
三月七(爱看动漫的程序员)1 小时前
SocraticLM: Exploring Socratic Personalized Teaching with Large Language Models
人工智能·语言模型·自然语言处理·chatgpt·prompt
冯浩(grow up)2 小时前
通义灵码--AI代码生成插件--安装和使用
人工智能·开源软件·ai编程