OpenCV实时目标跟踪开发部署 - 第2节

2. 目标跟踪基础

目标表示方法 · 特征提取(颜色直方图、HOG、深度特征)

目标跟踪的第一步是如何描述目标。从经典的矩形框到灵活的轮廓,从手工设计的颜色直方图、HOG 到数据驱动的深度特征,每一种表示与特征都深刻影响着跟踪的鲁棒性与速度。本章系统梳理这些基础概念,并辅以直观的 SVG 图解。

2.1 目标表示方法

目标表示定义了跟踪器“看到”什么以及如何建模。主流表示包括矩形框、点、轮廓/分割掩码。

矩形框 (BBox) 点 (中心/关键点) 轮廓 / 掩码
表示方法描述典型应用
矩形框 (BBox)使用 (x, y, w, h) 或 (x1,y1,x2,y2) 定义目标区域KCF, DSST, SORT
点 (Point)目标中心点或稀疏关键点集合光流法、点跟踪
轮廓 / 掩码像素级分割区域,可描述不规则形状SiamMask, 视频分割

2.2 特征提取

特征是将原始像素转换为判别性表示的关键。以下三种特征在跟踪领域具有里程碑意义。

🔹 颜色直方图

在 HSV 或 RGB 空间统计像素分布,对旋转和部分遮挡鲁棒,但丢失空间信息。

颜色直方图 (HSV 色调 bin)

🔹 HOG (方向梯度直方图)

通过局部梯度方向分布描述形状与边缘,对光照变化有一定不变性。广泛用于行人检测与跟踪。

8×8 cell 梯度方向直方图 块归一化 (Block)

🔹 深度特征 (CNN / 预训练)

利用大规模数据训练的卷积网络(如 AlexNet, ResNet, Siamese)提取语义特征,显著提升跟踪精度。深度特征通常来自高层语义层或相关响应图。

Conv ReLU Pool Conv FC 深度特征 → 响应图 / 嵌入向量

特征对比一览

特征类型维度鲁棒性计算速度典型跟踪器
颜色直方图低 (32~128)光照、旋转极快均值漂移、Staple
HOG中 (~4000)边缘、形状快KCF, DSST
深度特征高 (512~4096)语义、形变需GPUSiamRPN, ATOM, TransT

2.3 代码示例:提取颜色直方图与 HOG

以下 Python 代码展示如何从图像区域提取颜色直方图和 HOG 特征(使用 OpenCV 和 skimage)。

import cv2
import numpy as np
from skimage.feature import hog

# 读取图像并选择目标区域 (x, y, w, h)
img = cv2.imread('target.jpg')
x, y, w, h = 120, 80, 64, 128
roi = img[y:y+h, x:x+w]

# ----- 颜色直方图 (HSV) -----
hsv_roi = cv2.cvtColor(roi, cv2.COLOR_BGR2HSV)
hist = cv2.calcHist([hsv_roi], [0, 1], None, [50, 60], [0, 180, 0, 256])
cv2.normalize(hist, hist, 0, 255, cv2.NORM_MINMAX)

# ----- HOG 特征 -----
gray_roi = cv2.cvtColor(roi, cv2.COLOR_BGR2GRAY)
hog_feat, hog_img = hog(gray_roi, orientations=9, pixels_per_cell=(8,8),
                        cells_per_block=(2,2), visualize=True)
print(f'HOG 特征维度: {hog_feat.shape}')
输入图像 目标区域 (ROI) 特征提取 颜色直方图 / HOG / CNN 特征向量