AI 大模型之 opencv 目标检测 Haar 级联 / HOG+SVM 实战

AI人工智能阿木 发布于 2025-07-13 16 次阅读


OpenCV:目标检测实战——Haar级联与HOG+SVM方法

目标检测是计算机视觉领域的一个重要研究方向,它旨在从图像或视频中识别并定位出感兴趣的目标。OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉库,它提供了丰富的图像处理和计算机视觉功能,包括目标检测。本文将围绕OpenCV中的目标检测技术,详细介绍Haar级联和HOG+SVM两种方法,并通过实际代码进行实战演练。

Haar级联

1. Haar级联简介

Haar级联是Adaboost算法在目标检测领域的一个应用。它通过学习一系列的Haar特征,并使用Adaboost算法进行分类,从而实现对目标的检测。Haar特征是一种基于图像局部特征的描述方法,它通过计算图像中不同区域(如眼睛、鼻子、嘴巴等)的亮度和灰度差来表示。

2. 实现步骤

1. 加载Haar级联分类器:首先需要加载一个预训练的Haar级联分类器,OpenCV提供了多个预训练的分类器,可以根据需要选择。

2. 读取图像:使用OpenCV读取待检测的图像。

3. 创建窗口大小:根据预训练的Haar级联分类器,确定检测窗口的大小。

4. 检测目标:遍历图像中的所有窗口,使用Haar级联分类器对每个窗口进行分类,如果分类结果为正类,则认为在该窗口中检测到了目标。

5. 绘制检测结果:在图像上绘制检测到的目标区域。

3. 代码实现

python

import cv2

加载Haar级联分类器


face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')

读取图像


image = cv2.imread('example.jpg')

转换为灰度图像


gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

检测人脸


faces = face_cascade.detectMultiScale(gray, 1.1, 4)

绘制检测结果


for (x, y, w, h) in faces:


cv2.rectangle(image, (x, y), (x+w, y+h), (255, 0, 0), 2)

显示图像


cv2.imshow('Image', image)


cv2.waitKey(0)


cv2.destroyAllWindows()


HOG+SVM

1. HOG+SVM简介

HOG(Histogram of Oriented Gradients)是一种基于图像局部特征的描述方法,它通过计算图像中每个像素点的梯度方向和强度,并统计这些梯度方向和强度的直方图来表示图像。SVM(Support Vector Machine)是一种常用的分类算法,它通过寻找一个最优的超平面来将不同类别的数据分开。

2. 实现步骤

1. 计算HOG特征:使用OpenCV的HOG描述符计算图像的HOG特征。

2. 训练SVM分类器:使用训练数据对SVM分类器进行训练。

3. 检测目标:使用训练好的SVM分类器对测试图像进行分类,如果分类结果为正类,则认为在该图像中检测到了目标。

4. 绘制检测结果:在图像上绘制检测到的目标区域。

3. 代码实现

python

import cv2


import numpy as np

计算HOG特征


def hog_features(image):


winSize = (64, 64)


blockSize = (16, 16)


blockStride = (8, 8)


cellSize = (8, 8)


nbins = 9


hog = cv2.HOGDescriptor(winSize, blockSize, blockStride, cellSize, nbins)


hog_features = hog.compute(image)


return hog_features

加载SVM分类器


svm = cv2.SVM()

训练SVM分类器


svm.train(hog_features(train_images), np.array(train_labels))

检测目标


def detect_objects(image, svm):


hog_features = hog_features(image)


_, result = svm.predict(hog_features)


return result

读取图像


image = cv2.imread('example.jpg')

检测目标


result = detect_objects(image, svm)

绘制检测结果


if result == 1:


cv2.rectangle(image, (x, y), (x+w, y+h), (255, 0, 0), 2)

显示图像


cv2.imshow('Image', image)


cv2.waitKey(0)


cv2.destroyAllWindows()


总结

本文介绍了OpenCV中的目标检测技术,包括Haar级联和HOG+SVM两种方法。通过实际代码实现,展示了如何使用OpenCV进行目标检测。这些技术在实际应用中具有广泛的应用前景,如人脸识别、车辆检测等。希望本文能对读者在目标检测领域的学习和研究有所帮助。