opencv使用KCF算法跟踪目标,给出目标中心位置

效果图

代码

import cv2class VideoTracker:def __init__(self, video_path: str):self.video_path = video_pathself.cap = cv2.VideoCapture(video_path)self.tracker = cv2.legacy.TrackerKCF_create()self.initBB = Noneself.tracker_initialized = Falseself.selecting = Falseself.frame = Noneself.paused = Falseself.tracking_started = Falseself.frame_skip = 2  # Adjusted for better tracking continuitydef select_roi(self, event, x, y, flags, param):""" Handle mouse events for ROI selection. """if event == cv2.EVENT_LBUTTONDOWN:self.initBB = (x, y, 0, 0)self.selecting = Trueelif event == cv2.EVENT_MOUSEMOVE and self.selecting:self.initBB = (self.initBB[0], self.initBB[1], x - self.initBB[0], y - self.initBB[1])self.frame_copy = self.frame.copy()cv2.rectangle(self.frame_copy, (self.initBB[0], self.initBB[1]), (x, y), (255, 0, 0), 2)cv2.imshow('Video', self.frame_copy)elif event == cv2.EVENT_LBUTTONUP:self.initBB = (self.initBB[0], self.initBB[1], x - self.initBB[0], y - self.initBB[1])self.selecting = Falseif self.initBB[2] > 0 and self.initBB[3] > 0:self.tracker.init(self.frame, self.initBB)self.tracker_initialized = Trueself.tracking_started = Truedef process_frame(self):""" Process frames for object tracking. """frame_counter = 0while self.cap.isOpened():ret, frame = self.cap.read()if not ret:breakif frame_counter % (self.frame_skip + 1) == 0:self.frame = frame.copy()if self.tracking_started:if self.tracker_initialized:success, bbox = self.tracker.update(self.frame)if success:(x, y, w, h) = [int(v) for v in bbox]center_x, center_y = int(x + w / 2), int(y + h / 2)cv2.rectangle(self.frame, (x, y), (x + w, y + h), (0, 255, 0), 2)cv2.circle(self.frame, (center_x, center_y), 5, (0, 0, 255), -1)cv2.putText(self.frame, f"Center: ({center_x}, {center_y})", (center_x + 10, center_y - 10),cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 255), 2)else:# Tracker failed, try re-initializingself.tracker_initialized = Falseself.tracking_started = Falseif not self.tracking_started:# Optionally, re-select ROI here if desiredpasscv2.imshow('Video', self.frame)frame_counter += 1key = cv2.waitKey(1) & 0xFFif key == ord('q'):breakelif key == ord(' '):  # Space key to pause/resumeself.paused = not self.pausedelif key == ord('s') and not self.selecting and not self.tracking_started:if self.initBB:self.tracker.init(self.frame, self.initBB)self.tracker_initialized = Trueself.tracking_started = Trueself.cap.release()cv2.destroyAllWindows()def start(self):""" Start the video tracking process. """cv2.namedWindow('Video')cv2.setMouseCallback('Video', self.select_roi)# Read the first frame and let the user select the ROIret, self.frame = self.cap.read()if not ret:print("Error: Unable to read video file.")returnself.frame_copy = self.frame.copy()cv2.imshow('Video', self.frame)print("Select ROI and press 's' to start tracking.")cv2.waitKey(0)  # Wait for the user to select ROIself.process_frame()if __name__ == '__main__':video_path = 'ego-planner户外飞行测试.mp4'  # 修改为你的实际视频路径if not video_path:print("Error: No video path provided.")else:tracker = VideoTracker(video_path)tracker.start()

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

河道高效治理新策略:视频AI智能监控如何助力河污防治

一、背景与现状 随着城市化进程的加快,河道污染问题日益严重,对生态环境和居民生活造成了严重影响。为了有效治理河道污染,提高河道管理的智能化水平,TSINGSEE青犀提出了一套河污治理视频智能分析及管理方案。方案依托先进的视频…

Android adb shell ps进程查找以及kill

Android adb shell ps进程查找以及kill 列出当前Android手机上运行的所有进程信息如PID等: adb shell ps 但是这样会列出一大堆进程信息,不便于定向查阅,可以使用关键词查找: adb shell "ps | grep 关键词" 关键词查…

SQLException:Operation not allowed after ResultSet closed

运行代码时出现的错误: 这是在运行简单的JDBC访问数据库时出现的问题,原因是在ResultSet方法中添加了close()关闭方法,如图: ResultSet 是通过 query 方法获得的,并且在 try-catch 块中没有显式地关闭它。这实际上是 一个常见的…

C++STL详解(一)——string类的接口详解(下)

目录 一.string的大小和容量成员函数 1.1size()和length() 1.2capacity() 1.3resize() 1.4reserve() 1.5clear()和empty() ​编辑 二.string元素的访问 2.1operator[]和at() 2.2范围for 三.string中迭代器相关函数 3.1begin()和end() 3.2rbegin()和rend() 四.string…

机械学习—零基础学习日志(高数12——反三角函数)

零基础为了学人工智能,真的开始复习高数 反三角函数很困难,但是当建立了逻辑链条,还是能快速理解的。这个办法就是笛卡尔坐标系。 三角函数与反三角函数的个人理解 sinx与cosx,tanx,secx,其实都可以放在…

react中简单的配置路由

1.安装react-router-dom npm install react-router-dom 2.新建文件 src下新建page文件夹,该文件夹下新建login和index文件夹用于存放登录页面和首页,再在对应文件夹下分别新建入口文件index.js; src下新建router文件用于存放路由配置文件…

加速下载,揭秘Internet Download Manager2024下载器的威力!

1. Internet Download Manager(IDM)是一款广受欢迎的下载管理软件,以其强大的下载加速功能和用户友好的界面著称。 IDM马丁正版下载如下: https://wm.makeding.com/iclk/?zoneid34275 idm最新绿色版一键安装包链接:抓紧保存以…

C++学习笔记——模板

学习视频 文章目录 模板的概念函数模板函数模板语法函数模板注意事项函数模板案例普通函数与函数模板的区别普通函数与函数模板的调用规则模板的局限性 类模板类模板与函数模板区别类模板中成员函数创建时机类模板对象做函数参数类模板与继承类模板成员函数类外实现类模板分文件…

JS基础知识学习笔记全

JS基础知识学习笔记全 一、引入方式 1、内部脚本 &#xff08;一般定义在body下面会改善执行速度&#xff09; <body></body><!-- 内部脚本 --><script>/* 打开页面警告框显示的内容 */alert(helloJS);</script>2、外部脚本 外部专门新建一…

Nginx系列-10 realIp模块使用

背景 Nginx对每个模块都有说明文档&#xff0c;可参考:https://nginx.org/en/docs/ 当请求被代理后&#xff0c;真实客户端相对服务器被隐藏&#xff0c;即服务端无法判断HTTP消息来源。 如上图所示&#xff0c;IP分别为100.100.100.1和100.100.100.2的两个客户端向服务器200.…

TransformerEngine

文章目录 一、关于 TransformerEngine &#xff1f;亮点 二、使用示例PyTorchJAXFlax 三、安装先决条件Dockerpip从源码使用 FlashAttention-2 编译 四、突破性的变化v1.7: Padding mask definition for PyTorch 五、FP8 收敛六、集成七、其它贡献论文视频最新消息 一、关于 Tr…

traefik 2

不在白名单里的&#xff0c;就不能访问 允许谁访问&#xff0c;就把它加进来 traefik 高级应用 1. 负载均衡 关键在ingressroute 添加多个 svc 验证 就是找一台&#xff0c;配好host, 然后 两个svc 权重都是1&#xff0c;改一下就成了灰度分布 2. 灰度发布 关键在于…

立创梁山派--移植开源的SFUD和FATFS实现SPI-FLASH文件系统

本文主要是在sfud的基础上进行fatfs文件系统的移植&#xff0c;并不对sfud的移植再进行过多的讲解了哦&#xff0c;所以如果想了解sfud的移植过程&#xff0c;请参考我的另外一篇文章&#xff1a;传送门 正文开始咯 首先我们需要先准备资料准备好&#xff0c;这里对于fatfs的…

Chapter 10 Python数据容器:字符串

欢迎大家订阅【Python从入门到精通】专栏&#xff0c;一起探索Python的无限可能&#xff01; 文章目录 前言一、字符串的定义二、字符串的下标索引三、字符串的常用操作&#xff08;方法&#xff09;四、字符串的遍历 前言 在 Python 中&#xff0c;数据容器是组织和管理数据的…

NC 二叉树的最大深度

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 描述 求给定二叉树…

com.mysql.cj.jdbc.Driver 爆红

出现这样的问题就是pom.xml文件中没有添加数据库依赖坐标 添加上这个依赖即可&#xff0c;添加完后重新加载一下Maven即可。 如果感觉对你有用就点个赞&#xff01;&#xff01;&#xff01;

加密货币换法拉利!BTC和ETH可买超跑,满足加密富豪需求!未来继续扩张全球市场!

全球知名的意大利豪华跑车制造商法拉利&#xff08;Ferrari&#xff09;正在跟随时代潮流&#xff0c;加速在全球范围内推广其加密货币支付系统。这一举措旨在进一步满足加密货币持有者对奢侈品的需求&#xff0c;并拥抱日益普及的数字资产。 2023年10月&#xff0c;法拉利在美…

一文掌握YOLOv1-v10

引言 YOLO目标检测算法&#xff0c;不过多介绍&#xff0c;是基于深度学习的目标检测算法中最出名、发展最好的检测器&#xff0c;没有之一。本文简要的介绍一下从YOLOv1-YOLOv10的演化过程&#xff0c;详细技术细节不过多介绍&#xff0c;只提及改进点&#xff0c;适合初学者…

美团大众点评字符验证码

声明(lianxi a15018601872) 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 前言(…

昇思MindSpore学习入门-高阶自动微分

mindspore.ops模块提供的grad和value_and_grad接口可以生成网络模型的梯度。grad计算网络梯度&#xff0c;value_and_grad同时计算网络的正向输出和梯度。本文主要介绍如何使用grad接口的主要功能&#xff0c;包括一阶、二阶求导&#xff0c;单独对输入或网络权重求导&#xff…