14 目标检测之HOG特征与SVM
系列进度
OpenCV 教程 · 第 14 / 24 篇
整理说明
这篇内容怎么整理
郭震 · 2026-06-04
阅读路线
先按这条路线读
先抓住主线,再回到代码、配置和图文细节,读起来会更稳。
OpenCV 学习要把图像输入、处理步骤、检测结果和工程性能放在一起验证。阅读时可以按「HOG特征简介 -> SVM介绍 -> HOG特征与SVM结合的步骤 -> 数据准备」建立结构,再回到正文里的代码、案例或指标做验证。
读完后,用一个真实小任务复查:输入是什么,处理环节在哪里,输出是否可验收;失败时先查「HOG特征简介」,再查「SVM介绍」。
在前一篇中,我们探讨了Haar特征分类器在目标检测中的应用,了解了其工作原理及如何进行训练和检测。在这一篇中,我们将深入研究HOG特征(Histogram of Oriented Gradients)与SVM(支持向量机)的结合在目标检测中的应用。
HOG特征简介
HOG特征是一种有效的物体检测特征,尤其在行人检测上表现突出。HOG特征的基本思想是利用局部区域的梯度方向和幅度来描述目标的形状和特征。具体步骤如下:
学习 HOG 与 SVM 目标检测时,先看梯度方向、单元块、特征向量、分类器和滑动窗口。
- 预处理图像:通常会将图像转换为灰度图,并对其进行归一化处理。
- 计算梯度:通过Sobel算子计算图像的水平方向和垂直方向的梯度。
- 细分区域:将图像划分为小的单元格(例如,8x8像素),在每个单元格内计算梯度的方向直方图。
- 形成HOG描述符:将相邻的单元格组合成一个“块”,对块内的HOG特征进行归一化,形成最终的HOG特征描述符。
这样,HOG特征能够提供一个非常好的目标区域的描述。
SVM介绍
SVM(支持向量机)是一种监督学习模型,用于分类和回归。在目标检测中,我们使用SVM来分类通过HOG特征提取的样本。SVM尝试找到一个最佳的超平面,来分隔不同类别的数据点,并使用“支持向量”来定义这个超平面。
《目标检测之HOG特征与SVM》这类内容容易被细节带偏。先看图里的主线,再回到正文核对环境、输入、输出和判断标准。
HOG特征与SVM结合的步骤
1. 数据准备
我们需要收集一个包含目标和非目标图像的数据集。例如,使用行人检测时,可以从公共数据集中获取带有行人的图像以及不带行人的图像。
2. 特征提取
使用OpenCV的HOGDescriptor类提取图像中的HOG特征。
import cv2
# 初始化HOG描述符
hog = cv2.HOGDescriptor()
# 读取图像
image = cv2.imread('person.jpg')
# 计算HOG特征
hog_features = hog.compute(image)
3. 创建训练数据
将提取的HOG特征与相应的标签(如行人:1,非行人:0)结合,形成训练数据集。
import numpy as np
# 假设我们有多个图像的HOG特征和标签
features = np.array([hog.compute(cv2.imread(img)) for img in image_paths])
labels = np.array([1 if 'person' in img else 0 for img in image_paths])
4. 训练SVM模型
使用OpenCV的ml.SVM进行模型训练。
# 创建SVM分类器
svm = cv2.ml.SVM_create()
svm.setKernel(cv2.ml.SVM_RBF) # RBF核
svm.setType(cv2.ml.SVM_C_SVC) # 分类类型
svm.setC(1) # 惩罚参数
# 训练SVM
svm.train(np.float32(features), cv2.ml.ROW_SAMPLE, np.int32(labels))
5. 模型评估
通过交叉验证或其他评价方法评估模型的性能,调整超参数以提高准确性。
6. 目标检测
对新图像进行检测时,首先提取HOG特征,然后使用训练好的SVM模型进行分类。
# 读取新图像并提取HOG特征
new_image = cv2.imread('test_image.jpg')
new_hog_features = hog.compute(new_image)
# 使用SVM进行预测
result = svm.predict(np.float32(new_hog_features.reshape(1, -1)))[1]
if result[0][0] == 1:
print("检测到目标!")
else:
print("未检测到目标。")
学完《目标检测之HOG特征与SVM》后,不妨换一个自己的场景试一次,重点观察输入、处理和输出是否能对应起来。
如果想把《目标检测之HOG特征与SVM》用到自己的任务里,可以先缩小场景,只验证一个最关键的判断点。
结果展示与总结
通过上述步骤,我们成功实现了使用HOG特征和SVM进行目标检测。此方法在许多应用中具有良好的性能,尤其是在人脸识别、行人检测等领域。
在下一篇中,我们将探讨更先进的目标检测技术,包括YOLO与SSD,进一步增强我们的目标检测能力。
希望这一篇教程能够帮助你理解HOG特征和SVM的基本概念与应用实践。通过结合具体的案例和代码,我们能够更好地掌握这一技术的实现。
继续阅读
从这篇继续找到相关教程
常见问题
读前先确认这三点
目标检测之HOG特征与SVM适合谁读?
这是 OpenCV 教程 系列第 14 / 24 篇,适合正在学习OpenCV 教程,并且需要把概念落到操作步骤或判断标准里的读者。
读这篇OpenCV教程要多久?
按中文技术文章阅读速度估算,通读大约 4 分钟;如果要跟着复现,建议把命令、配置和结果检查分开做。
这篇文章里的图文节点怎么用?
正文里有 6 个图文节点,可以先用它们抓住流程、配置和判断点,再回到对应段落细读。
分享文章
转发到常用平台
微信/朋友圈可先复制链接
相关教程
从相近问题继续读
继续阅读