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://www.mzph.cn/diannao/50750.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【教程】vscode添加powershell7终端

win10自带的 powershell 是1.0版本的,太老了,更换为powershell7后,在 vscode 的集成终端中没有显示本篇教程记录在vscode添加powershell7终端的过程 打开vscode终端配置 然后来到这个页面进行设置 查看 powershell7 的安装位置&#xff…

韦东山嵌入式linux系列-异常与中断的概念及处理流程

1 中断的引入 一些概念: 中断:在主程序运行过程中,出现了特定的中断触发条件(中断源),使得CPU暂停当前正在运行的程序,转而去处理中断程序,处理完成后又返回原来被暂停的位置继续运…

数据结构第二讲:顺序表

数据结构第二讲:顺序表 1.线性表2.什么是顺序表3. 静态顺序表4.动态顺序表4.1顺序表基础4.2顺序表的初始化4.3顺序表的销毁4.4顺序表的尾插4.5顺序表的头插4.6顺序表的尾删4.7顺序表的头删4.8顺序表在指定位置之前插入数据4.9顺序表删除指定位置的数据4.10顺序表查找…

JNPF全新V5.0版本!重磅升级——全局优化篇

尊敬的JNPF用户们: 我们非常高兴地宣布,经过团队数月的辛勤努力和不断的技术创新,JNPF快速开发平台终于迎来了里程碑式的全新升级——V5.0版本!这一版本的更新发布,不仅代表着我们技术实力的进一步提升,是…

大模型深度神经网络(Deep Neural Network, DNN)

大模型深度神经网络(Deep Neural Network, DNN)是一种复杂的机器学习模型,其特点在于包含多个隐藏层,从而赋予模型强大的非线性表达能力和对复杂数据模式的学习能力。以下是对大模型DNN的详细介绍: 一、基本概念 深度…

el-table列的显示与隐藏

需求:实现 表字段的显示与隐藏。效果图 代码实现 写在前面 首先 我部分字段有自定义的排序逻辑,和默认值或者 数据的计算 所以是不能简单的使用 v-for 循环column 。然后 我需要默认展示一部分字段,并且 当表无数据时 提示不能 显示隐藏 …

Flink-CDC解析(第47天)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言1. CDC 概述1.1 什么是CDC?1.2 CDC的实现机制1) 基于主动查询的 CDC:2) 基于事件接收CDC: 前言 本文主要概述了Flink-CDC. …

人工智能驱动的光学检测技术可阻止假冒芯片

欢迎关注GZH《光场视觉》 在过去的60年里,半导体行业已经蓬勃发展,成为了一个价值5000亿美元的全球市场。然而,这个行业正面临着两大挑战:新芯片的严重短缺和假冒芯片的激增。这两个问题不仅带来了巨大的故障风险,还导…

idea启动项目报:the command line via JAR manifest or via a classpath file and rerun.

解决方案 1.打开Edit Configurations,进去编辑,如下: 笔记配置 2.选择Modfiy options,点击Shorten command line 3.在新增的Shorten command line选项中选择JAR manifest或classpath file 4.点击保存后即可

RK3588+MIPI+GMSL+AI摄像机:自动车载4/8通道GMSL采集/边缘计算盒解决方案

RK3588作为目前市面能买到的最强国产SOC,有强大的硬件配置。在智能汽车飞速发展,对图像数据矿场要求越来越多的环境下,如何高效采集数据,或者运行AI应用,成为刚需。 推出的4/8通道GMSL采集/边缘计算盒产品满足这些需求…

leetcode日记(51)不同路径Ⅱ

和上一道题(无障碍物的最短路径)很像,但事实上比上一题多了优化方法 根据上一题改的代码如下,添加了对障碍物的判定,如果有障碍物则将数组值设为0。 class Solution { public:int uniquePathsWithObstacles(vector&l…

【PyCharm】PyCharm 2024.1 的最新变化-代码补全与智能提示

目录 代码补全与智能提示 更智能的代码补全功能 基于机器学习的代码建议 上下文相关的代码片段推荐 全行代码补全支持 (JavaScript 和 TypeScript) 本地 ML 模型的全行补全 示例 示例 1: 基于上下文的代码建议 示例 2: 全行代码补全 详细对比示例 示例 3: 传统代码补…

[Vulnhub] Raven2 PHPMailer-RCE+MSQP:Mysql权限提升

信息收集 IP AddressOpening Ports192.168.101.160TCP:22,80,111,46606 $ nmap -p- 192.168.101.160 --min-rate 1000 -sC -sV PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 6.7p1 Debian 5deb8u4 (protocol 2.0) | ssh-hostkey: | 1024 26:81:c1:f…

数据结构 链式存储 +

int DeleteLinkList(LinkList *list, char *name); int ReviseLinkList(LinkList *list, char *name, DATATYPE data); int DestroyLinkList(LinkList *list); int InsertTailLinkList(LinkList *list, DATATYPE data); ​​​​​​​删除 修改​​​​​​​ 销毁 ​​​​​…

Anaconda +Pytorch安装教程

Anaconda Pytorch安装教程 Anaconda安装 小土堆的安装教程:PyTorch深度学习快速入门教程(绝对通俗易懂!)【小土堆】_哔哩哔哩_bilibili Free Download | Anaconda 这里自己选一个文件夹安装即可 第一个红框表示添加图标到开始菜…

CentOS配置NTP服务

更改配置文件 [rootController ~]# vim /etc/chrony.conf 重启服务并设置为开机自启动 [rootController ~]# systemctl restart chronyd.service [rootController ~]# systemctl enable chronyd.service 在另一台CentOS测试 更改配置文件 [rootCompute ~]# vim /etc/chron…

magento2 安装win环境和linux环境

win10 安装 安装前提,php,mysql,apach 或nginx 提前安装好 并且要php配置文件里,php.ini 把错误打开 display_errorsOn开始安装 检查环境 填写数据库信息 和ssl信息,如果ssl信息没有,则可以忽略 填写域名和后台地址&#xff0…

websocket通信问题排查思路

websocket通信问题排查思路 一、websocket连接成功,但数据完全推不过来。 通过抓包发现,是回包时间太长超过了1分钟导致的。这种通常是推送数据的线程有问题导致的。 正常抓包的情况如下: 二、大量数据可以正常推送成功,不定时…

matlab笔记 - 最小二乘法拟合直线的原理与实现

最小二乘法拟合直线原理与实现 一、引言二、原理概述1. 建模思路2.误差函数3.求解最优参数 三、matlab实现最小二乘法拟合直线1.直接代码实现2.MATLAB内置函数实现 四、扩展统计学与回归分析经济学工程学图像处理机器学习 一、引言 最小二乘法(Least Squares Metho…

Java成为最适合中国人体质编程语言的缘由

在开始前刚好我有一些资料,是我根据网友给的问题精心整理了一份「java的资料从专业入门到高级教程」,点个关注在评论区回复“666”之后私信回复“666”,全部无偿共享给大家!!! 语言的流行度Java在中国的普及…