| 追踪器 | 特点 | 适用场景 |
|---|---|---|
| CSRT | 精度高、抗遮挡、速度中等 | 近距离、小目标、有短暂遮挡(首选) |
| KCF | 速度快、抗轻微形变 | 高速视频、实时追踪 |
| MOSSE | 极快、轻量化 | 嵌入式、低配置设备 |
| BOOSTING | 老旧算法,易漂移 | 基本不用 |
| TLD | 自动检测丢失重找 | 目标频繁离开画面 |
pip install opencv-python opencv-contrib-python numpy
三、案例 1:手动框选目标单目标追踪(CSRT)
import cv2
# 1. 创建追踪器
tracker = cv2.TrackerCSRT_create()
# 读取视频,0=摄像头,填路径=本地视频
cap = cv2.VideoCapture("test.mp4")
# 读取首帧
ret, frame = cap.read()
# 手动框选 ROI:鼠标拖拽框目标,回车确认
bbox = cv2.selectROI("select target", frame, False)
# 初始化追踪器
tracker.init(frame, bbox)
while True:
ret, frame = cap.read()
if not ret:
break
# 目标更新
ok, new_bbox = tracker.update(frame)
if ok:
# 绘制框
x, y, w, h = map(int, new_bbox)
cv2.rectangle(frame, (x, y), (x+w, y+h), (0,255,0), 2)
cv2.putText(frame, "Tracking", (10,30), cv2.FONT_HERSHEY_SIMPLEX,1,(0,255,0),2)
else:
cv2.putText(frame, "Lost", (10,30), cv2.FONT_HERSHEY_SIMPLEX,1,(0,0,255),2)
cv2.imshow("track", frame)
if cv2.waitKey(25) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
优势:帧率高,适合 USB 摄像头实时画面。
import cv2
# 多目标管理器
multi_tracker = cv2.MultiTracker_create()
cap = cv2.VideoCapture("test.mp4")
ret, frame = cap.read()
# 多次框选多个物体,ESC结束选框
while True:
bbox = cv2.selectROI("multi select", frame, False)
if sum(bbox) == 0: # 无框退出选择
break
# 添加单个CSRT追踪器
t = cv2.TrackerCSRT_create()
multi_tracker.add(t, frame, bbox)
while True:
ret, frame = cap.read()
if not ret: break
success, bboxes = multi_tracker.update(frame)
for box in bboxes:
x,y,w,h = map(int,box)
cv2.rectangle(frame,(x,y),(x+w,y+h),(255,0,0),2)
cv2.imshow("multi track", frame)
if cv2.waitKey(25)==ord('q'):break
cap.release()
cv2.destroyAllWindows()

全部评论