opencv实现目标跟踪及视频转存
创建跟踪器
def createTypeTracker(trackerType):
读取视频第一帧,选择跟踪的目标
读第一帧。
ok, frame = video.read()
选择边界框
bbox = cv2.selectROI(frame, False)
初始化跟踪器
tracker_type = ‘MIL’
tracker = createTypeTracker(tracker_type)
用第一帧和包围框初始化跟踪器
ok = tracker.init(frame, bbox)
随着视频进行更新跟踪
更新跟踪器
ok, bbox = tracker.update(frame)
完整代码如下:
import cv2
import sys
import numpy as np# 创建一个跟踪器,algorithm: KCF、CSRT、DaSiamRPN、GOTURM、MIL
trackerTypes = ['BOOSTING', 'MIL', 'KCF', 'TLD', 'MEDIANFLOW', 'GOTURN', 'MOSSE', 'CSRT']def createTypeTracker(trackerType):if trackerType == trackerTypes[0]:tracker = cv2.legacy.TrackerBoosting_create()elif trackerType == trackerTypes[1]:tracker = cv2.TrackerMIL_create()elif trackerType == trackerTypes[2]:tracker = cv2.legacy.TrackerKCF_create()elif trackerType == trackerTypes[3]:tracker = cv2.legacy.TrackerTLD_create()elif trackerType == trackerTypes[4]:tracker = cv2.legacy.TrackerMedianFlow_create()elif trackerType == trackerTypes[5]: # 暂时存在问题tracker = cv2.TrackerGOTURN_create()elif trackerType == trackerTypes[6]:tracker = cv2.legacy.TrackerMOSSE_create()elif trackerType == trackerTypes[7]:tracker = cv2.legacy.TrackerCSRT_create()else:tracker = Nonereturn trackervideoPth = 'D:/workspace_all/pyCharm/BicycleTrackerByOpenCV/video2.mp4'if __name__ == '__main__':# 经测试CSRT效果最好tracker_type = 'CSRT'tracker = createTypeTracker(tracker_type)# 读取视频video = cv2.VideoCapture(videoPth)#fps = video.get(cv2.CAP_PROP_FPS)# 用于展示cv2.namedWindow("test", 0)cv2.resizeWindow("test", 1200, 900) # 设置窗口的长和宽# 获取视频的帧率和尺寸fps = video.get(cv2.CAP_PROP_FPS)width = int(video.get(cv2.CAP_PROP_FRAME_WIDTH))height = int(video.get(cv2.CAP_PROP_FRAME_HEIGHT))# 保存跟踪视频output = cv2.VideoWriter('D:/desktop/output.mp4', cv2.VideoWriter_fourcc(*'mp4v'), fps, (width, height))# 如果视频没有打开,退出。if not video.isOpened():print"Could not open video"sys.exit()# 读第一帧。ok, frame = video.read()#cv2.imshow('test', frame)if not ok:print('Cannot read video file')sys.exit()# 定义一个初始边界框bbox = (287, 23, 86, 320)# 选择一个不同的边界框bbox = cv2.selectROI('test', frame, False)# 用第一帧和包围框初始化跟踪器ok = tracker.init(frame, bbox)while True:# 读取一个新的帧ok, frame = video.read()if not ok:break# 启动计时器timer = cv2.getTickCount()# 更新跟踪器ok, bbox = tracker.update(frame)# 计算帧率(FPS)fps = cv2.getTickFrequency() / (cv2.getTickCount() - timer);# 绘制包围框if ok:# 跟踪成功p1 = (int(bbox[0]), int(bbox[1]))p2 = (int(bbox[0] + bbox[2]), int(bbox[1] + bbox[3]))cv2.rectangle(frame, p1, p2, (0, 0, 255), 2, 3)else:# 跟踪失败cv2.putText(frame, "Tracking failure detected", (100, 80), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (0, 0, 255), 2)# 在帧上显示跟踪器类型名字cv2.putText(frame, tracker_type + " Tracker", (100, 20), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (50, 170, 50), 2);# 在帧上显示帧率FPScv2.putText(frame, "FPS : " + str(int(fps)), (100, 50), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (50, 170, 50), 2);# 显示结果# cv2.imshow("Tracking", frame)cv2.imshow('test', frame)# 保存视频output.write(frame)# 按ESC键退出k = cv2.waitKey(1) & 0xffif k == 27: breakoutput.release()
跟踪效果

常见问题
https://blog.csdn.net/taotao_guiwang/article/details/133301116?spm=1001.2014.3001.5501
参考
https://blog.csdn.net/weixin_45823221/article/details/128470499
相关文章:
opencv实现目标跟踪及视频转存
创建跟踪器 def createTypeTracker(trackerType): 读取视频第一帧,选择跟踪的目标 读第一帧。 ok, frame video.read() 选择边界框 bbox cv2.selectROI(frame, False) 初始化跟踪器 tracker_type ‘MIL’ tracker createTypeTracker(tracker_type) 用第一…...
R | R及Rstudio安装、运行环境变量及RStudio配置
R | R及Rstudio安装、运行环境变量及RStudio配置 一、介绍1.1 R介绍1.2 RStudio介绍 二、R安装2.1 演示电脑系统2.2 R下载2.3 R安装2.4 R语言运行环境设置(环境变量)2.4.1 目的2.4.2 R-CMD测试2.4.3 设置环境变量 2.5 R安装测试 三、RStudio安装3.1 RStu…...
智能回答机器人的“智能”体现在哪里?
人工智能的广泛应用已经成为当今社会科技发展的趋势之一。通过人工智能技术,我们可以在不同领域中实现自动化、智能化和高效化,从而大大提升生产和生活效率。智能回答机器人的出现和使用便能很好的证明这一点。今天我们就来探讨一下智能会打机器人的“智…...
多网卡场景数据包接收时ip匹配规则
多网卡场景数据包接收时ip匹配规则 mac地址匹配规则 接收数据包时数据包中的目的mac地址匹配接收网卡的mac地址后,数据包才会继续被传递到网络层处理 ip地址匹配规则 图1: 参见:https://zhuanlan.zhihu.com/p/529160026?utm_id0 图2&am…...
安防视频平台EasyCVR视频调阅全屏播放显示异常是什么原因?
安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…...
1.5.C++项目:仿muduo库实现并发服务器之socket模块的设计
项目完整版在: 一、socket模块:套接字模块 二、提供的功能 Socket模块是对套接字操作封装的一个模块,主要实现的socket的各项操作。 socket 模块:套接字的功能 创建套接字 绑定地址信息 开始监听 向服务器发起连接 获取新连接 …...
whisper+剪映+chatgpt实现实时语音对话功能
whisper将录音文件转成文字---chatgpt回答---剪映tts将文字转成语言。 GitHub - openai/whisper: Robust Speech Recognition via Large-Scale Weak Supervision whisper剪映chatgpt实现实时语音对话功能_哔哩哔哩_bilibili...
ASUS华硕ZenBook 13灵耀U 2代U3300F笔记本UX333FN/FA原装出厂Win10系统工厂安装模式
系统自带所有驱动、出厂主题壁纸、系统属性华硕专属LOGO标志、Office办公软件、MyASUS华硕电脑管家等预装程序 下载链接:https://pan.baidu.com/s/1dK0vMZMECPlT63Rb6-jeFg?pwdbym5 所需要工具:16G或以上的U盘(非必需) 文件格式:HDI,SWP,O…...
前端面试的话术集锦第 21 篇博文——高频考点(设计模式)
这是记录前端面试的话术集锦第二十一篇博文——高频考点(设计模式),我会不断更新该博文。❗❗❗ 设计模式总的来说是一个抽象的概念,前人通过无数次的实践总结出的一套写代码的方式,通过这种方式写的代码可以让别人更加容易阅读、维护以及复用。 这一章节我们将来学习几…...
php实战案例记录(2)生成包含字母和数字但不重复的用户名
在PHP中,您可以使用以下代码生成不重复的10个用户名,每个用户名包含英文字母和数字: $generatedUsernames array(); // 存储生成的用户名while (count($generatedUsernames) < 10) {$username generateUsername();if (!in_array($usern…...
分类预测 | Matlab实现SSA-CNN-SVM麻雀算法优化卷积支持向量机分类预测
分类预测 | Matlab实现SSA-CNN-SVM麻雀算法优化卷积支持向量机分类预测 目录 分类预测 | Matlab实现SSA-CNN-SVM麻雀算法优化卷积支持向量机分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现SSA-CNN-SVM麻雀算法优化卷积支持向量机分类预测࿰…...
【ARMv8 SIMD和浮点指令编程】NEON 加载指令——如何将数据从内存搬到寄存器(其它指令)?
除了基础的 LDx 指令,还有 LDP、LDR 这些指令,我们也需要关注。 1 LDNP (SIMD&FP) 加载 SIMD&FP 寄存器对,带有非临时提示。该指令从内存加载一对 SIMD&FP 寄存器,向内存系统发出访问是非临时的提示。用于加载的地址是根据基址寄存器值和可选的立即偏移量计算…...
ElementPlus· tab切换/标签切换 + 分页
tab切换 ---> <el-tabs><el-tab-pane>... 分页 --------> <el-pagination> tab切换 // tab标签切换 // v-model双向绑定选项中的name,tab-change事件在 activeName改变时触发 <script setup> const tabChange (tab, event)>{…...
华为云云耀云服务器L实例评测|搭建CounterStrike Source Delicated Server(CS起源游戏服务器)
华为云云耀云服务器L实例评测|搭建CounterStrike Source Delicated Server(CS起源游戏服务器) #【有奖征文】华为云云服务器焕新上线,快来亲身感受评测吧!# ⭐️ CounterStrikeSource(CS起源是Valve的一款…...
腾讯云中使用ubuntu安装属于自己的overleaf
在自己的云服务器上安装overleaf的需求是从写论文开始的,总担心自己的论文放在一个网站上被泄露,所以想要在自己的服务器上安装自己的overleaf,正好手边有一个云服务器,现在开始。 配置腾讯云 因为使用overleaf的优势就是在不同…...
【redisson学习笔记】
1)clone项目 git clone https://github.com/redisson/redisson.git本来想直接用maven编译源码, 却发现各种错误,主要是maven的编译插件版本问题。 2)然后用maven包方式引入 <dependencies><dependency><groupId>org.redisson</gr…...
gurobi属性篇一
1.构造目标函数 (1)一般的写法: 我们常见的目标函数写法通常是定义好式子zf(x,y,...),然后用m.setObjective(z, GRB。MINIMIZE),这样的定义方式比较普遍。 这也是一般的写法。 (2)但还有一种写法…...
【python数据建模】Pandas库
概述 Pandas库主要提供了三种数据结构: (1)Series:带标签的一维数据 (2)DataFrame:带标签且大小可变的二维表结构 (3)Panel:带标签且大小可变的三维数据 Pan…...
Flutter笔记:关于应用程序中提交图片作为头像
Flutter笔记 关于应用程序中提交图片作为头像 作者:李俊才 (jcLee95):https://blog.csdn.net/qq_28550263 邮箱 :291148484163.com 本文地址:https://blog.csdn.net/qq_28550263/article/details/133418554…...
【C++】C++的类型转换
文章目录 1. C语言中的类型转换2. C中的类型转换2.1 static_cast2.2 reinterpret_cast2.3 const_cast2.4 dynamic 1. C语言中的类型转换 在C语言中,经常会出现一种情况:运算符两边的类型不同,或者形参实参类型不匹配,此时就会发生…...
CANN 算子融合技术:Conv-BN-ReLU 与 MatMul-LayerNorm 等融合模式深度解析
CANN 算子融合技术:Conv-BN-ReLU 与 MatMul-LayerNorm 等融合模式深度解析算子融合是提升性能的关键手段。本文深入讲解昇腾支持的算子融合技术、实现原理和应用实践。一、融合技术概述 1.1 为什么要融合 原始: Conv → BN → ReLU → Conv → BN → ReLU融合前内存…...
CANN 端侧部署实战:模型转换与服务化
CANN 端侧部署实战:模型转换与服务化如何将训练好的模型快速部署到昇腾端侧设备?本文详解模型格式转换、端侧优化与服务化部署的完整流程。—一、端侧部署概述 1.1 端侧部署的挑战 与数据中心训练不同,端侧部署面临独特的约束:算力…...
别再只用Selenium了!手把手教你用Python+UIAutomation+Unittest搭建Windows应用自动化测试框架
从Selenium到UIAutomation:Windows GUI自动化测试实战进阶指南 当Web自动化测试工程师首次接触Windows桌面应用测试时,往往会陷入工具选择的困境。传统基于坐标操作的自动化方案难以应对动态界面变化,而商业工具又存在学习成本高、灵活性不足…...
激光器物理理论模型:从经典到量子,工程师如何选择?
1. 激光器物理理论模型全景概览激光,这束高度相干、单色、定向的光,其诞生与运作背后,是一套极其精密的物理法则。对于从事光电子、激光技术研发,乃至物理研究的工程师和学者而言,理解这些法则的不同描述层次ÿ…...
从MySQL分区到OceanBase分区:迁移老手教你平滑过渡与性能调优
从MySQL分区到OceanBase分区:迁移老手教你平滑过渡与性能调优 当MySQL分区表遇上OceanBase分布式架构,传统设计思维往往成为性能瓶颈的源头。本文将揭示两种数据库分区机制的本质差异,并提供一套经过生产验证的迁移方法论,帮助您避…...
【ElevenLabs新疆话语音落地实战】:20年语音AI专家亲授3大合规适配难点与5步部署清单
更多请点击: https://kaifayun.com 第一章:ElevenLabs新疆话语音落地的背景与战略价值 随着国家“东数西算”工程纵深推进和多语种人工智能基础设施建设提速,维吾尔语作为我国重要的少数民族语言之一,其语音合成技术的自主可控与…...
uView 2.0自定义主题开发:颜色配置与样式覆盖的详细步骤
uView 2.0自定义主题开发:颜色配置与样式覆盖的详细步骤 【免费下载链接】uView2.0 uView UI,是全面兼容nvue的uni-app生态框架,全面的组件和便捷的工具会让您信手拈来,如鱼得水 项目地址: https://gitcode.com/gh_mirrors/uv/u…...
硬件工程师,每天5分钟(5)——为什么 DDR5 最怕地不好?回流路径,才是高速设计真正的灵魂
讲透: 回流路径 为什么 Split Plane 最危险 为什么加地孔有时候能救命 为什么 GPS 会被 DDR 干扰 为什么 EMC 挂的根因常是地 🚗《硬件工程师,每天5分钟》第5篇 🔥《为什么 DDR5 最怕地不好?回流路径,才是高…...
kafka安装与可视化工具offset explore连接操作说明
1.1 环境前置要求 本地部署 Kafka 4.0 极简,无复杂依赖,只需满足 1 个核心条件: 本地已安装 JDK 17 及以上版本(推荐 JDK 17),并配置好 Java 环境变量(能在命令行执行 java -version 和 javac -…...
美国签证预约机器人:3分钟掌握24小时智能抢号终极方案
美国签证预约机器人:3分钟掌握24小时智能抢号终极方案 【免费下载链接】us-visa-bot US Visa Bot 项目地址: https://gitcode.com/gh_mirrors/us/us-visa-bot 还在为美国签证面试预约的漫长等待而烦恼吗?面对有限的面试名额和激烈的竞争环境&…...
