如何使用python和opencv实现行人轨迹跟踪
时间: 2023-05-27 20:07:03 浏览: 332
python结合opencv实现人脸检测与跟踪
使用Python和OpenCV实现行人轨迹跟踪可以通过以下步骤实现:
1. 使用OpenCV读取视频文件或摄像头视频流,获取每一帧图像。
2. 对每一帧图像进行行人检测,可以使用Haar Cascades或者HOG+SVM等方法。
3. 对于每个检测到的行人,使用一种目标跟踪算法(如Kalman滤波、Meanshift、Camshift等)来跟踪行人的运动轨迹。
4. 绘制行人轨迹线条,可以使用cv2.line()函数实现。
5. 可以将跟踪结果输出为视频或图片序列。
下面是一个基于OpenCV的行人轨迹跟踪的示例代码:
```python
import cv2
# 行人检测模型
hog = cv2.HOGDescriptor()
hog.setSVMDetector(cv2.HOGDescriptor_getDefaultPeopleDetector())
# 目标跟踪器
tracker = cv2.TrackerKCF_create()
# 读取视频
cap = cv2.VideoCapture('test.mp4')
# 轨迹绘制颜色
color = (0, 255, 0)
# 轨迹记录字典,key为目标ID,value为轨迹列表
tracks = {}
# 目标ID计数器
id_counter = 0
while True:
ret, frame = cap.read()
if not ret:
break
# 行人检测
rects, weights = hog.detectMultiScale(frame, winStride=(8, 8), padding=(32, 32), scale=1.05)
# 目标跟踪
for i, rect in enumerate(rects):
# 检测到的行人作为新目标
tracker.init(frame, tuple(rect))
id_counter += 1
tracks[id_counter] = [tuple(rect)]
# 已有目标进行跟踪
for track_id, track in tracks.items():
ok, bbox = tracker.update(frame)
if ok:
# 更新轨迹
tracks[track_id].append(tuple(bbox))
# 绘制轨迹
for i in range(1, len(track)):
cv2.line(frame, track[i-1], track[i], color, 2)
else:
# 目标丢失,删除轨迹
del tracks[track_id]
# 显示结果
cv2.imshow('frame', frame)
if cv2.waitKey(1) == 27:
break
cap.release()
cv2.destroyAllWindows()
```
运行该代码可以打开摄像头或读取视频文件,进行行人轨迹跟踪并实时显示跟踪结果。可以根据需要调整检测和跟踪参数,以适应不同的应用场景。
阅读全文