HOG特征(Histogram of Oriented Gradients,方向梯度直方图)是一种用于图像识别和目标检测的特征描述子。它的核心思想是通过计算图像中局部区域的梯度方向直方图来表示图像的特征。
HOG特征的计算过程包括以下几个步骤:
HOG特征的优点在于具有旋转不变性和光照不变性,能够有效地描述物体的形状和纹理信息。它在目标检测任务中表现出色,尤其适用于检测具有明显边缘和纹理特征的物体。因此,在计算机视觉领域,HOG特征被广泛应用于行人检测、人脸识别等任务。
import cv2
import numpy as np
def detect_pedestrians(image_path):
# 创建HOG对象并设置SVM检测器
hog = cv2.HOGDescriptor()
hog.setSVMDetector(cv2.HOGDescriptor_getDefaultPeopleDetector())
# 读取图像
image = cv2.imread(image_path)
# 检测行人
boxes, weights = hog.detectMultiScale(image, winStride=(2, 2), padding=(8, 8), scale=1.05)
# 绘制检测框
for (x, y, w, h) in boxes:
cv2.rectangle(image, (x, y), (x + w, y + h), (0, 0, 255), 2)
# 显示结果图像
cv2.imshow("Pedestrian Detection", image)
cv2.waitKey(0)
cv2.destroyAllWindows()
if __name__ == "__main__":
# 指定要检测的图像路径
image_path = "path_to_your_image.jpg"
detect_pedestrians(image_path)
这个示例加载了一个预训练的HOG+SVM的行人检测器,并用它来检测图像中的行人。
detectMultiScale方法返回的是一个数组,其中包含检测到的对象的边界框的位置和大小。
然后,我们遍历这些边界框,并在原始图像上绘制它们。
需要注意的是,基于HOG特征的行人检测方法可能会受到图像质量、行人姿态和外观等因素的影响,因此在实际应用中可能需要调整参数或考虑使用更复杂的方法来提高检测性能。
在
hog.detectMultiScale(image, winStride=(4, 4), padding=(8, 8), scale=1.05)
这行代码中,各参数含义如下:
运行结果: