【计算机视觉】实现一个结合了 KNN 背景减法、MeanShift 和kalmanfilter的行人跟踪器。

该博客详细介绍了如何使用OpenCV库进行行人检测和跟踪。首先,通过视频文件捕获画面,并利用前20帧建立背景减法器的历史。接着,基于背景减法和第21帧识别运动的前景物体,将它们视为行人,并分配ID和跟踪窗口。然后,使用卡尔曼滤波器和均值偏移对每个行人进行跟踪。在每一帧中,行人位置通过卡尔曼滤波器预测并显示,同时更新跟踪窗口。整个过程持续到视频结束,展示了行人检测和跟踪的有效性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述:

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],
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值