《深度学习》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、完整代码

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)即可。(如下图所示)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/892705.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

麒麟桌面版v10 SP1以docker方式安装达梦数据库

安装docker 0.切换root用户(可以不切换,但要注意权限问题,我是用root) ymym-pc:~/桌面$ whoami ym ymym-pc:~/桌面$ sudo -i rootym-pc:~# whoami root rootym-pc:~# 1.查看系统版本 [rootlocalhost opt]# cat /etc/os-release…

java类和对象(上)

前言: 不知道大家有没有将java方法的使用熟记入心呢?如果没有的话,可以打开博主的上一篇博文阅读哦,在这里谢谢大家一路的陪伴。也希望我的内容能够帮到你更快的掌握java语言的学习。接下来我们要讲的是java类和对象。让我们整理…

最新Mac优化清理工具CleanMyMac X 4.15.6 for mac中文版图文教程

CleanMyMac X mac版下载是一款功能更加强大的系统优化清理工具,软件只需两个简单步骤就可以把系统里那些乱七八糟的无用文件统统清理掉,节省宝贵的磁盘空间。CleanMyMac X for mac相比于 CleanMyMac3来说,功能增加了不少,比如新增…

Java并发 - AQS之CountDownLatch

文章目录 基本使用源码分析awaitcountDowngetCount 可重置的CountDownLatch总结 CountDownLatch是一个多线程同步工具类,允许一个或多个线程等待,直到在其他线程中执行的一组操作完成。主要用来解决一个线程或多个线程等待另外多个线程的场景。 初始化需…

在Linux中搭建WordPress并实现Windows主机远程访问

WordPreWordPress是一个基于PHP开发的开源平台,适用于在支持PHP与MySQL数据库的服务器上搭建个性化博客或网站。同时,它也能够作为功能强大的内容管理系统(CMS)被广泛应用。 虚拟机:VirtualBox 虚拟机安装&#x1f449…

win10中mysql数据库binlog恢复

win10中mysql数据库binlog恢复 昨天有朋友江湖救急,说测试库里的表不小心删除更新了数据。这里也复习下binlog数据恢复,当然需要一定的条件:首先mysql开启binlog,然后每天需要备份对应的数据库 1 单库单表准备 在恢复数据前&am…

QT开发--文件的读写操作

第十三章 文件的读写操作 Qt提供两种读写纯文本文件的方法: 1、直接使用 QFile 类的IO功能; 2、结合 QFile 和 QTextStream,利用流(Stream)进行操作。 13.1 文件读操作 13.1.1 使用QFile类 Qt封装了QFile类,方便我们对文件进行操…

鸿蒙OS启动流程

启动流程(基于openharmony4.1) 系统上电加载内核后,按照以下流程完成系统各个服务和应用的启动: 内核加载init进程,一般在bootloader启动内核时通过设置内核的cmdline来指定init的位置。init进程启动后,会挂载tmpfs,…

bat脚本banenr

飞出个未来班得 echo off echo .-. echo ( ) echo - echo J L echo ^| ^| echo J L echo ^| ^| echo J L echo …

MySQL-表相关(DDL DML)

文章目录 表的基本操作表的创建表的删除 MySQL中的数据类型整数类型浮点数类型定点数类型日期和时间类型字符串类型charvarchartext 二进制类型 DDL语句查看建表语句修改表名新增字段修改字段(名类型)修改字段(仅类型)删除字段 DML语句insert 增delete 删truncate 语句update 改…

前端学习-CSS的三大特性(十七)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 层叠性 继承性 行高的继承性 优先级 优先级注意点 权重叠加 总结 前言 引入css特性的学习 CSS 有三个非常重要的三个特性:层叠性、继承性、优先级。 层叠…

Android 第5种启动模式:singleInstancePerTask

Android 第5种启动模式:singleInstancePerTask 随着 Android 版本的更新,应用启动模式逐渐丰富。在 Android 12 中,新增了一种启动模式——singleInstancePerTask。它是继 standard、singleTop、singleTask 和 singleInstance 之后的第五种启…

纯css 轮播图片,鼠标移入暂停 移除继续

核心 滚动&#xff1a; animation: 动画名称 20s linear infinite normal;停止&#xff1a; animation: 动画名称 20s linear infinite paused; 完整例子&#xff1a; html: <div class"carousel-wrapper"><div class"carousel"><div cl…

chrome浏览器映射端口

chrome://inspect/#devices 方法2

mysql主从复制及故障修复

一、主MySQL数据库的配置 分别在三台主机&#xff08;chen2/10.110、chen3/10.120、chen4/10.130)中安装mysql数据&#xff0c;其中chen2/10.110作为主MySQL服务器&#xff0c;其余两台作为从MySQL服务器。 1、在主机上部署mysql数据库 详细的请看上一篇&#xff1a;mysql数据…

NewStarCTF2024-Week2-Web-WP

目录 1、复读机 2、你能在一秒内打出八句英文吗 3、遗失的拉链 4、谢谢皮蛋 plus 5、PangBai 过家家&#xff08;2&#xff09; 1、复读机 测了下存在 ssti 没什么说的 fenjing 秒了 2、你能在一秒内打出八句英文吗 每次出来的需要提交的内容都不一样 exp&#xff1a; …

CUDA 全局内存

全局内存在片外。 特点是&#xff1a;容量最大、延迟最大、使用最多 全局内存中的数据是所有线程可见的&#xff0c;Host端可见&#xff0c;且具有与程序相同的生命周期 动态全局内存 主机代码使用CUDA运行时API &#xff1a; cudaMalloc 声明内存空间&#xff1b; cudaFree…

MySQL【知识改变命运】07

MySQL 1&#xff1a;Group by 分组查询1.1&#xff1a;语法&#xff1a;1.2&#xff1a;练习 2&#xff1a;having⼦句3回顾&#xff1a;3&#xff1a;内置函数3.1 :⽇期函数 1&#xff1a;Group by 分组查询 可以根据某列&#xff0c;进行分组查询&#xff0c;比如学校里面的…

基于cloudreve(Docker应用)搭建网盘服务,用于目录的分享和在线预览。

文章目录 I 基于cloudreve(Docker应用)搭建网盘服务安装主要功能设置角色最大容量II 知识扩展:网盘类的文件预览需求背景: iOS可以直接预览PDF等常见格式文件,但是Android浏览器需要先下载文件,才能查看文件内容,因此需要搭建支持目录的分享和在线预览的MinIO文件服务提供…

数据安全存储系统的概念与原理

数据安全存储系统是一种综合性的数据保护方案&#xff0c;旨在确保数据的完整性、保密性和可用性。以下是对数据安全存储系统的详细介绍&#xff1a; 一、概念与原理 数据安全存储系统通过硬件、软件和网络等多个层面的保护措施&#xff0c;防止未经授权的访问、避免数据丢失或…