38 Opencv HOG特征检测

news2025/1/8 15:16:39

文章目录

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

HOGDescriptor 构造函数

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)检测器,用于目标检测。

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

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

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

detectMultiScale 多尺度检测目标。

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: 是否使用均值漂移分组来合并候选矩形框。

示例

#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;
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2272655.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

分布式搜索引擎之elasticsearch基本使用3

分布式搜索引擎之elasticsearch基本使用3 1.部署单点es 1.1.创建网络 因为我们还需要部署kibana容器&#xff0c;因此需要让es和kibana容器互联。这里先创建一个网络&#xff1a; docker network create es-net1.2.加载镜像 这里我们采用elasticsearch的7.12.1版本的镜像&…

人工智能知识分享第九天-机器学习_集成学习

集成学习 概念 集成学习是机器学习中的一种思想&#xff0c;它通过多个模型的组合形成一个精度更高的模型&#xff0c;参与组合的模型称为弱学习器&#xff08;基学习器&#xff09;。训练时&#xff0c;使用训练集依次训练出这些弱学习器&#xff0c;对未知的样本进行预测时…

在线机考|2024华为实习秋招春招编程题(最新)——第3题_个性化歌单推荐系统_300分(十一)

题目内容 假设你是音乐服务的开发者,为了提高用户体验需要解决推荐歌单的同质化问题,保证推荐给用户的所有歌单不包含相同歌曲的。给定一个包含N个歌单和M条歌单重复记录,每个歌单用一个从1到N的整数编号,歌单重复记录包含两个歌单的ID,表示两个歌单有相同的歌曲。 你的任…

学英语学压测:02jmeter组件-测试计划和线程组ramp-up参数的作用

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#xff1a;先看关键单词&#xff0c;再看英文&#xff0c;最后看中文总结&#xff0c;再回头看一遍英文原文&#xff0c;效果更佳&#xff01;&#xff01; 关键词 Functional Testing功能测试[ˈfʌŋkʃənəl ˈtɛstɪŋ]Sample样…

最新最详细的配置Node.js环境教程

配置Node.js环境 一、前言 &#xff08;一&#xff09;为什么要配置Node.js&#xff1f;&#xff08;二&#xff09;NPM生态是什么&#xff08;三&#xff09;Node和NPM的区别 二、如何配置Node.js环境 第一步、安装环境第二步、安装步骤第三步、验证安装第四步、修改全局模块…

PHP框架+gatewayworker实现在线1对1聊天--接收消息(7)

文章目录 接收消息的原理接收消息JavaScript代码 接收消息的原理 接收消息&#xff0c;就是接受服务器转发的客户端消息。并不需要单独创建函数&#xff0c;因为 ws.onmessage会自动接收消息。我们需要在这个函数里进行处理。因为初始化的时候&#xff0c;已经处理的init类型的…

当算法遇到线性代数(四):奇异值分解(SVD)

SVD分解的理论与应用 线性代数系列相关文章&#xff08;置顶&#xff09; 1.当算法遇到线性代数&#xff08;一&#xff09;&#xff1a;二次型和矩阵正定的意义 2.当算法遇到线性代数&#xff08;二&#xff09;&#xff1a;矩阵特征值的意义 3.当算法遇到线性代数&#xff0…

科研绘图系列:R语言科研绘图之标记热图(heatmap)

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍加载R包数据下载导入数据数据预处理画图系统信息参考介绍 科研绘图系列:R语言科研绘图之标记热图(heatmap) 加载R包 library(tidyverse) library(ggplot2) library(reshape)…

Mysql--基础篇--SQL(DDL,DML,窗口函数,CET,视图,存储过程,触发器等)

SQL&#xff08;Structured Query Language&#xff0c;结构化查询语言&#xff09;是用于管理和操作关系型数据库的标准语言。它允许用户定义、查询、更新和管理数据库中的数据。SQL是一种声明性语言&#xff0c;用户只需要指定想要执行的操作&#xff0c;而不需要详细说明如何…

Excel重新踩坑5:二级下拉列表制作;★数据透视表;

0、在excel中函数公式不仅可以写在单元格里面&#xff0c;还可以写在公式里面。 1、二级下拉列表制作&#xff1a; 2、数据透视表&#xff1a; 概念&#xff1a;通过拖拉就能实现复杂函数才能实现的数据统计问题。 概览&#xff1a;在插入选项中有个数据透视表&#xff0c;数…

Linux-----进程处理(waitpid,进程树,孤儿进程)

目录 waitpid等待 进程树 孤儿进程 waitpid等待 Linux中父进程除了可以启动子进程&#xff0c;还要负责回收子进程的状态。如果子进程结束后父进程没有正常回收&#xff0c;那么子进程就会变成一个僵尸进程——即程序执行完成&#xff0c;但是进程没有完全结束&#xff0c;其…

解决报错net.sf.jsqlparser.statement.select.SelectBody

在我们项目集成mybatis-plus时,总会遇到奇奇怪怪的报错,比如说下面的这个报错 而这个报错,是告诉我们的分页依赖冲突,要加个jsqlparser依赖来解决这个冲突,也相当于平衡,但是可能因为我们版本的不匹配,还是会报错,例如下面这样 但是我们是不知道到底是什么依赖冲突的,这个时候就…

感知器的那些事

感知器的那些事 历史背景Rosenblatt和Minsky关于感知机的争论弗兰克罗森布拉特简介提出感知器算法Mark I感知机争议与分歧马文明斯基简介单层感知器工作原理训练过程多层感知器工作原理单层感知机 vs 多层感知机感知器模型(Perceptron),是由心理学家Frank Rosenblatt在1957年…

内核链表 例题 C语言实现

问题&#xff1a; 将下面的数据节点信息转换为链表结构&#xff0c;并遍历输出。要求根据type的值来决定val的类型。 type为1代表bool类型&#xff0c;2代表整形&#xff0c;3代表浮点型。无需解析文本&#xff0c;直接赋值形成节点即可。 代码&#xff1a; list.c #includ…

C语言结构体数组

上次我们讲解了结构体&#xff0c;这里还有高级应用就是结构体数组&#xff08;集合的集合&#xff09; &#xff08;这里提醒一句&#xff0c;想要在北京参加NCRE考试的朋友们今天开始报名了&#xff09; 定义 还是拿上回那个学生数据的结构体 typedef struct {int year;i…

深入了解 ES6 Map:用法与实践

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

在Vue3项目中使用svg-sprite-loader

1.普通的svg图片使用方式 1.1 路径引入 正常我们会把项目中的静态资源放在指定的一个目录&#xff0c;例如assets,使用起来就像 <img src"../assets/svgicons/about.svg" /> 1.2封装组件使用 显然上面的这种方法在项目开发中不太适用&#xff0c;每次都需…

谷歌SEO真的需要很长时间吗?

关键在于策略与执行力&#xff0c;很多人在刚开始做谷歌SEO时&#xff0c;都会产生一种挫败感&#xff0c;觉得排名变化太慢&#xff0c;看不到显著效果。这其实是因为SEO本身是一项需要时间的工作&#xff0c;特别是在竞争激烈的领域。但如果策略得当、执行力强&#xff0c;时…

耐高压26V输入5V升压充电8.4V芯片

HU6877作为一款集成了26V高耐压保护的5V升压至8.4V两节锂电池充电管理IC&#xff0c;凭借其高效升压、智能充电管理、多重安全保护及高耐压特性&#xff0c;在高端手电筒、便携式医疗设备、无人机等领域展现出了广泛的应用前景。本文将详细探讨HU6877的技术特点、工作原理、应用…

linuxCNC(六)配置LinuxCNC完成伺服控制

这里写目录标题 1、 cia402安装2、找伺服描述文件&#xff08;xml&#xff09;3、配置ethercat-config.xml3.1、打开hal-cia402/example/ethercat-conf.xml3.2、修改 ethercat-conf.xml文件中vid"0x000116c7" pid"0x003e0402"3.3、其他参数&#xff0c;根据…