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语言中,经常会出现一种情况:运算符两边的类型不同,或者形参实参类型不匹配,此时就会发生…...
Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器
第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...

html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!
简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...
【生成模型】视频生成论文调研
工作清单 上游应用方向:控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...

DeepSeek源码深度解析 × 华为仓颉语言编程精粹——从MoE架构到全场景开发生态
前言 在人工智能技术飞速发展的今天,深度学习与大模型技术已成为推动行业变革的核心驱动力,而高效、灵活的开发工具与编程语言则为技术创新提供了重要支撑。本书以两大前沿技术领域为核心,系统性地呈现了两部深度技术著作的精华:…...
从实验室到产业:IndexTTS 在六大核心场景的落地实践
一、内容创作:重构数字内容生产范式 在短视频创作领域,IndexTTS 的语音克隆技术彻底改变了配音流程。B 站 UP 主通过 5 秒参考音频即可克隆出郭老师音色,生成的 “各位吴彦祖们大家好” 语音相似度达 97%,单条视频播放量突破百万…...

【Java多线程从青铜到王者】单例设计模式(八)
wait和sleep的区别 我们的wait也是提供了一个还有超时时间的版本,sleep也是可以指定时间的,也就是说时间一到就会解除阻塞,继续执行 wait和sleep都能被提前唤醒(虽然时间还没有到也可以提前唤醒),wait能被notify提前唤醒…...
比特币:固若金汤的数字堡垒与它的四道防线
第一道防线:机密信函——无法破解的哈希加密 将每一笔比特币交易比作一封在堡垒内部传递的机密信函。 解释“哈希”(Hashing)就是一种军事级的加密术(SHA-256),能将信函内容(交易细节…...