OPenCV CUDA模块目标检测----- HOG 特征提取和目标检测类cv::cuda::HOG

  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

算法描述

cv::cuda::HOG 是 OpenCV 的 CUDA 模块中对 HOG 特征提取和目标检测 提供的 GPU 实现。它与 CPU 版本的 cv::HOGDescriptor 类似,但利用了 GPU 的并行计算能力以提高性能。

公共成员函数

创建与初始化

函数 描述
static Ptr cv::cuda::HOG::create() 创建一个默认配置的 HOG 对象。
void setSVMDetector(InputArray _svmDetector) 设置 SVM 分类器权重向量,用于检测特定目标(如行人)。

参数设置(与 HOG 特征相关)

函数 描述
void setWinSize(Size winSize) 设置检测窗口大小(必须是 cell 大小的整数倍)。
void setBlockSize(Size blockSize) 设置 block 的大小(单位:像素)。
void setCellSize(Size cellSize) 设置 cell 的大小(单位:像素)。
void setBinCount(int nBins) 设置每个 cell 的方向直方图 bin 数量。
void setBlockStride(Size blockStride) 设置 block 移动步长(单位:像素)。
void setDerivativeAperture(int derivAperture) 设置图像平滑/导数计算的孔径大小。
void setWinSigma(double winSigma) 高斯窗口的标准差。
void setHistogramNormType(int histogramNormType) 设置直方图归一化方式(L2Hys, L1, L1Sqrt, L2)。
void setL2HysNormalization(bool l2HysNormalization) 是否启用 L2-Hys 归一化。
void setGammaCorrection(bool gammaCorrection) 是否启用伽马校正。
void setNumLevels(int numLevels) 设置金字塔层数。

检测方法

函数 描述
void detectMultiScale(InputArray img, OutputArray foundLocations, double hitThreshold = 0, Size winStride = Size(), Size padding = Size()) 在图像中多尺度检测目标,并返回检测到的位置(矩形框)。

示例代码(GPU 上的行人检测)

cpp 复制代码
#include <opencv2/cudaobjdetect.hpp>
#include <opencv2/opencv.hpp>

int main()
{
    // 创建 HOG 对象
    cv::Ptr< cv::cuda::HOG > hog = cv::cuda::HOG::create();

    // 设置 SVM 分类器(行人检测)
    std::vector< float > detector = cv::HOGDescriptor::getDefaultPeopleDetector();
    hog->setSVMDetector( detector );

    // 读取图像(默认为 BGR 三通道)
    cv::Mat frame = cv::imread( "/media/dingxin/data/study/OpenCV/sources/images/00001.jpg" );
    if ( frame.empty() )
    {
        std::cerr << "无法读取图像!" << std::endl;
        return -1;
    }

    // 转换为灰度图(CV_8UC1)
    cv::Mat gray_frame;
    cv::cvtColor( frame, gray_frame, cv::COLOR_BGR2GRAY );

    // 上传到 GPU
    cv::cuda::GpuMat d_frame( gray_frame );

    // 执行检测
    std::vector< cv::Rect > found_locations;
    hog->detectMultiScale( d_frame, found_locations );

    // 绘制检测结果
    for ( const auto& r : found_locations )
    {
        cv::rectangle( frame, r, cv::Scalar( 0, 0, 255 ), 2 );
    }

    cv::imshow( "Pedestrian Detection", frame );
    cv::waitKey( 0 );
    return 0;
}

运行结果

效果仅供演示,要想效果专业一下,得自己去训练模型了。

相关推荐
庚昀◟19 小时前
用AI来“造AI”!Nexent部署本地智能体的沉浸式体验
人工智能·ai·nlp·持续部署
喜欢吃豆19 小时前
OpenAI Realtime API 深度技术架构与实现指南——如何实现AI实时通话
人工智能·语言模型·架构·大模型
数据分析能量站19 小时前
AI如何重塑个人生产力、组织架构和经济模式
人工智能
wscats20 小时前
Markdown 编辑器技术调研
前端·人工智能·markdown
AI科技星20 小时前
张祥前统一场论宇宙大统一方程的求导验证
服务器·人工智能·科技·线性代数·算法·生活
GIS数据转换器20 小时前
基于知识图谱的个性化旅游规划平台
人工智能·3d·无人机·知识图谱·旅游
EnoYao20 小时前
Markdown 编辑器技术调研
前端·javascript·人工智能
TMT星球20 小时前
曹操出行上市后首次战略并购,进军万亿to B商旅市场
人工智能·汽车
Coder_Boy_20 小时前
Spring AI 源码大白话解析
java·人工智能·spring
启途AI21 小时前
【深度解析】ChatPPT联动Nano Banana Pro:不止生成风格自由,AI创作编辑全链路解锁
人工智能·powerpoint·ppt