opencv c++ 寻找矩形框_OpenCV图像处理-HOG特征和应用

本文介绍了如何使用OpenCV的HOG特征进行行人检测。HOG特征是一种基于梯度方向直方图的特征提取算法,对光照和局部变形具有良好的鲁棒性。文章详细阐述了HOG特征的提取过程,包括Gamma矫正、灰度化、梯度计算、直方图统计和归一化,并给出了使用HOG+SVM进行行人检测的代码示例。最后,文章总结了HOG和SVM在简单识别任务中的应用及其局限性。
摘要由CSDN通过智能技术生成

HOG特征和应用

概述

✔️ HOG(Histogram of Oriented Gradient)特征在对象识别与模式匹配中是一种常见的特征提取算法,是基于本地像素块进行特征直方图提取的一种算法,对象局部的变形与光照影响有很好的稳定性。

HOG应用-行人检测

✔️ 用HOG特征来来识别人像,通过HOG特征提取+SVM训练,可以得到很好的效果,Opencv也集成了HOG进行的行人检测算法。

OpenCV函数

  1. hog = cv2.HOGDescriptor() :创建HOG特征描述;
  2. hog.setSVMDetector(cv.HOGDescriptor_getDefaultPeopleDetector()) :创建HOG+SVM行人检测器;
  3. 多尺度检测API:
rects, weights = hog.detectMultiScale(img, foundLocations,
                     hitThreshold = 0,
                     winStride, padding, 
                     scale = 1.05,
                     finalThreshold = 2.0,
                     useMeanshiftGrouping = false)
输入
  • Img --> 表示输入图像;
  • foundLocations --> 表示发现对象矩形框;
  • hitThreshold --> 表示SVM距离度量(特征与SVM分类超平面之间距离),默认0表示;
  • winStride --> 表示窗口步长;
  • padding --> 表示填充;
  • scale --> 表示尺度空间;
  • finalThreshold --> 最终阈值,默认为2.0;
  • useMeanshiftGrouping --> 不建议使用,速度太慢;
PS:其中窗口步长与Scale对结果影响最大,特别是Scale,小的尺度变化有利于检出低分辨率对象,同时也会导致FP发生,高的可以避免FP但是会产生FN(对象漏检)。

行人检测代码示例

import cv2 as cv

src = cv.imread("people.png")
cv.imshow("input", src)
# hog特征描述
hog = cv.HOGDescriptor()
# 创建SVM检测器
hog.setSVMDetector(cv.HOGDescriptor_getDefaultPeopleDetector())
# 检测行人
(rects, weights) = hog.detectMultiScale(src,
                                        winStride=(4, 4),
                                        padding=(8, 8),
                                        scale=1.25,
                                        useMeanshiftGrouping=False)
for (x, 
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用OpenCV实现人脸和行人检测需要以下步骤: 1. 安装OpenCV库 首先需要安装OpenCV库,可以使用pip命令安装: ``` pip install opencv-python ``` 2. 加载图像 使用OpenCV读取图像文件,可以使用cv2.imread()函数: ``` import cv2 image = cv2.imread('image.jpg') ``` 3. 创建分类器 人脸和行人检测需要使用分类器,可以从OpenCV的GitHub仓库下载训练好的分类器文件。下载地址: - Haar Cascades for face detection: https://github.com/opencv/opencv/blob/master/data/haarcascades/haarcascade_frontalface_default.xml - HOG+SVM for pedestrian detection: https://github.com/opencv/opencv/blob/master/data/haarcascades/hogcascade_pedestrians.xml 下载好文件后,使用cv2.CascadeClassifier()函数创建分类器: ``` face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') pedestrian_cascade = cv2.CascadeClassifier('hogcascade_pedestrians.xml') ``` 4. 人脸检测 使用cv2.detectMultiScale()函数进行人脸检测,该函数可以返回检测到的人脸的坐标和大小: ``` gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5) ``` 5. 行人检测 使用cv2.HOGDescriptor()函数创建行人检测器,然后使用detectMultiScale()函数进行行人检测: ``` gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) pedestrians = pedestrian_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5) ``` 6. 绘制检测框 使用cv2.rectangle()函数在图像上绘制框出人脸和行人的矩形框: ``` for (x, y, w, h) in faces: cv2.rectangle(image, (x, y), (x+w, y+h), (0, 255, 0), 2) for (x, y, w, h) in pedestrians: cv2.rectangle(image, (x, y), (x+w, y+h), (0, 0, 255), 2) ``` 完整代码如下: ``` import cv2 # 加载图像 image = cv2.imread('image.jpg') # 创建分类器 face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') pedestrian_cascade = cv2.CascadeClassifier('hogcascade_pedestrians.xml') # 人脸检测 gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5) # 行人检测 gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) pedestrians = pedestrian_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5) # 绘制检测框 for (x, y, w, h) in faces: cv2.rectangle(image, (x, y), (x+w, y+h), (0, 255, 0), 2) for (x, y, w, h) in pedestrians: cv2.rectangle(image, (x, y), (x+w, y+h), (0, 0, 255), 2) # 显示图像 cv2.imshow('Image', image) cv2.waitKey(0) cv2.destroyAllWindows() ``` 运行后可以看到图像上人脸和行人的位置被框出来了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值