问题描述:
1. 捕获画面从视频文件
2. 使用前 20 帧来填充背景减法器的历史
3. 基于背景减法,使用第21帧识别运动的前景物体,我们将其视为行人。 为每个行人分配一个id和一个初始跟踪窗口,然后计算一个直方图
4. 对于每个后续帧,使用卡尔曼滤波器和均值偏移跟踪每个行人
实现步骤:
- 创造行人类,初始化每个行人的id和跟踪窗口
'''
1.pedestrain class: 接受一个 id ,一个 hsv 格式的初始帧,和一个初始跟踪窗口,
'''
import cv2
import numpy as np
class Pedestrian():
'''
一个被追踪行人,有一个状态,包括id,窗口,直方图和过滤器'''
def __init__(self,id,hsv_frame,track_window):
self.id = id
self.track_window = track_window
self.term_crit = (cv2.TERM_CRITERIA_COUNT| cv2.TERM_CRITERIA_EPS,10,1)
x,y,w,h = track_window
roi = hsv_frame[y:y+h,x:x+w]
roi_hist = cv2.calcHist([roi],[0],None,[16],[0,180])
self.roi_hist = cv2.normalize(roi_hist,roi_hist,0,255,cv2.NORM_MINMAX)
self.kalman = cv2.KalmanFilter(4, 2)
self.kalman.measurementMatrix = np.array(
[[1, 0, 0, 0],
[0, 1, 0, 0]], np.float32)
self.kalman.transitionMatrix = np.array(
[[1, 0, 1, 0],
[0, 1, 0, 1],