《深度学习》OpenCV 物体跟踪 原理及案例解析

目录

一、物体跟踪

1、什么是物体跟踪

2、步骤

1)选择跟踪算法

2)初始化跟踪器

3)在每个视频帧上执行跟踪

4)可选的重新初始化

3、原理

二、案例实现

1、完整代码

1)使用方式

2)运行结果

2、关于代码中selectROI的参数showCrosshair

3、使用摄像头


一、物体跟踪

1、什么是物体跟踪

物体跟踪是指在一个视频序列持续追踪特定的物体。这可以在许多应用程序中很有用,例如目标识别、视频监控和增强现实。

2、步骤

1)选择跟踪算法

OpenCV提供了多种物体跟踪算法,例如基于颜色直方图的CamShift算法、基于模板匹配的MeanShift算法、基于运动向量的光流法等。

2)初始化跟踪器

使用选定的算法,初始化物体跟踪器。这通常涉及选择感兴趣区域(ROI)或提供初始边界框。

3)在每个视频帧上执行跟踪

对于每个视频帧,使用跟踪算法来更新物体的位置。这可能涉及计算运动向量、偏移或变换。

4)可选的重新初始化

如果物体跟丢了,你可以选择重新初始化跟踪器,以确保继续跟踪。

3、原理

物体跟踪的原理基于计算机视觉和图像处理的技术。不同的算法使用不同的原理来实现物体跟踪。例如,基于颜色的跟踪算法使用颜色分布来识别并跟踪物体。模板匹配算法使用图像相似性来在连续帧中找到最佳匹配。光流法则利用像素强度之间的变化来估计物体的运动。

二、案例实现

1、完整代码

python 复制代码
import cv2
tracker = cv2.TrackerCSRT_create()  # 创建一个CSRT跟踪器,基于判别式滤波器的跟踪方法,适用于长时间跟踪
tracking = False  # 初始化跟踪标志
cap = cv2.VideoCapture('test.avi')   # 打开视频文件
while True:   # 建立死循环,遍历视频帧
    ret,frame = cap.read()   # 读取每一帧图像,返回读取状态布尔值,以及每一帧图像
    if not ret:   # 如果没有读取到视频帧,终止循环
        break
    if cv2.waitKey(1) == ord('a'):   # 等待键盘按下a键,按下后执行判断语句
        tracking = True    # 设置跟踪标志为True
        roi = cv2.selectROI('Tracking', frame, showCrosshair = False)  # showCrosshair表示是否显示十字准尾,默认为True
        # 使用selectROI函数标记感兴趣的区域ROI,Tracking为窗口名称,frame为每一帧画面,在其上标记区域
        tracker.init(frame,roi)  # 上一步标记区域ROI后,在当前这步初始化CSRT跟踪器,以便于接收新的视频帧
    if tracking:   # tracking为True表示按下了a键
        success, box = tracker.update(frame)  # 更新CSRT跟踪器状态并获取跟踪结果,返回值,success为布尔值表示是否跟踪成功,box为四元组(x,y,w,h),表示当前帧上对象的边界框
        if success:  # 如果跟踪到了
            x,y,w,h = [int(v) for v in box]   # 遍历出来跟踪到的四元组内的数据
            cv2.rectangle(frame, (x,y),(x+ w,y+ h),(0,255,0), 2)  # 在frame上绘制矩形框
    cv2.imshow( 'Tracking', frame)  # 展示跟踪的画面,因为是在frame上直接标记的
    if cv2.waitKey(100)== 27:  # 键入esc键终止循环,100表示每一帧的画面展示100毫秒
        break
# 释放资源
cap.release()  # 释放视频捕获对象
cv2.destroyAllWindows()  # 销毁所有窗口
1)使用方式

右击运行后,点击小写a键,没反应就多次点击,直至画面静止,然后鼠标选中需要识别的区域,点击空格或回车即可自动跟踪识别。

2)运行结果

2、关于代码中selectROI的参数showCrosshair

3、使用摄像头

只需将上述代码中的cap = cv2.VideoCapture('test.avi')更改为cap = cv2.VideoCapture(0)即可。(如下图所示)

相关推荐
机器之心3 分钟前
突破LLM遗忘瓶颈,谷歌「嵌套学习」让AI像人脑一样持续进化
人工智能·openai
Juchecar3 分钟前
利用AI辅助"代码考古“操作指引
人工智能·ai编程
Juchecar10 分钟前
AI时代,如何在人机协作中保持代码的清晰性与一致性
人工智能·ai编程
掘金安东尼27 分钟前
被权重出卖的“脏数据”:GPT-oss 揭开的 OpenAI 中文训练真相
人工智能
Orange_sparkle38 分钟前
关于dify中http节点下载文件时,文件名不为原始文件名问题解决
人工智能·http·chatgpt·dify
王哈哈^_^1 小时前
【完整源码+数据集】蓝莓数据集,yolo11蓝莓成熟度检测数据集 3023 张,蓝莓成熟度数据集,目标检测蓝莓识别算法系统实战教程
人工智能·算法·yolo·目标检测·计算机视觉·ai·视觉检测
盘古开天16661 小时前
通俗易懂:YOLO模型原理详解,从零开始理解目标检测
人工智能·yolo·目标检测
OpenBuild.xyz1 小时前
x402 生态系统:Web3 与 AI 融合的支付新基建
人工智能·web3
嵌入式老牛1 小时前
OpenCV 第10课 图像处理—阈值处理
图像处理·opencv·计算机视觉
王哈哈^_^1 小时前
【完整源码+数据集】高空作业数据集,yolo高空作业检测数据集 2076 张,人员高空作业数据集,目标检测高空作业识别系统实战教程
人工智能·算法·yolo·目标检测·计算机视觉·目标跟踪·视觉检测