当前位置: 首页 > news >正文

OpenCV视频实时跟踪目标,多种算法,python版

  • 测试结果

同等条件下对比:

'csrt', # 261.0ms, lost 0 'kcf', # 51.0ms, lost 157 'boosting', # 23.7ms, lost 0 'mil', # 273.1ms, lost 0 'tld', # 100.7ms, lost 0 'medianflow', # 6.6ms, lost 37 'mosse' # 10.7ms, lost 158
  • 具体代码
import cv2 import time def init_tracker(frame): # 创建跟踪器 if tracker_index == 0: tracker = cv2.legacy.TrackerCSRT_create() elif tracker_index == 1: tracker = cv2.legacy.TrackerKCF_create() elif tracker_index == 2: tracker = cv2.legacy.TrackerBoosting_create() elif tracker_index == 3: tracker = cv2.legacy.TrackerMIL_create() elif tracker_index == 4: tracker = cv2.legacy.TrackerTLD_create() elif tracker_index == 5: tracker = cv2.legacy.TrackerMedianFlow_create() elif tracker_index == 6: tracker = cv2.legacy.TrackerMOSSE_create() height, width = frame.shape[:2] bbox = [int(width*(1-check_ratio)/2), int(height*(1-check_ratio)/2), width*check_ratio, height*check_ratio] # 初始化跟踪器 ok = tracker.init(frame, bbox) return tracker, bbox def track_action(tracker, frame): current_time = time.time() result = frame.copy() # 更新跟踪器,获取新边界框 ok, bbox = tracker.update(result) lost = 0 if ok: # 跟踪成功:绘制边界框 (x, y, w, h) = [int(v) for v in bbox] cv2.rectangle(result, (x, y), (x+w, y+h), (0, 255, 0), 2) else: # 跟踪失败 lost = 1 cv2.putText(result, "Tracking failure", (50, 80), cv2.FONT_HERSHEY_SIMPLEX, 2, (0,0,255), 2) cost_time = (time.time()-current_time) return result, cost_time, lost def track_video(input_video, output_video): # 读取视频 input = cv2.VideoCapture(input_video) ok, frame = input.read() if not ok: print("Cannot read video") return fps = int(input.get(cv2.CAP_PROP_FPS)) width = int(input.get(cv2.CAP_PROP_FRAME_WIDTH)) height = int(input.get(cv2.CAP_PROP_FRAME_HEIGHT)) tracker, bbox = init_tracker(frame) fourcc = cv2.VideoWriter_fourcc(*'mp4v') output = cv2.VideoWriter(output_video, fourcc, fps, (width*2, height)) frame_counter = 0 track_lost = 0 work_cost = 0 while True: ok, frame = input.read() if not ok: break frame_counter += 1 track_frame, cost, lost = track_action(tracker, frame) work_cost += cost track_lost += lost if (merge_video): track = cv2.hconcat([frame, track_frame]) output.write(track) if (frame_counter % 100 == 0): print(frame_counter) print('tracker(%s): cost per frame(ms)=%.2f' % (tracker_names[tracker_index], (work_cost/frame_counter*1000))) print('tracker(%s): track(lost/total)=%d/%d' % (tracker_names[tracker_index], track_lost, frame_counter)) output.release() input.release() # 跟踪器类型, total 527 frames # tracker name, cost per frame(ms), lost tracker_names = [ 'csrt', # 261.0ms, lost 0 'kcf', # 51.0ms, lost 157 'boosting', # 23.7ms, lost 0 'mil', # 273.1ms, lost 0 'tld', # 100.7ms, lost 0 'medianflow', # 6.6ms, lost 37 'mosse' # 10.7ms, lost 158 ] merge_video = True check_ratio = 1/10 tracker_index = 0 input_video = 'test.mp4' output_video = 'track.mp4' for index in range(7): tracker_index = index output_video = ("track%d.mp4" % tracker_index) track_video(input_video, output_video)
http://www.jsqmd.com/news/222524/

相关文章:

  • AD画PCB实战案例:四层板叠层结构设计
  • 未来已来:企业级AI agent开发平台,正在如何悄然重塑组织的形态与边界?
  • 串口通信协议自动收发电路:半双工控制实现示例
  • GEO五强揭晓!SHEEP-GEO领跑,企业如何借势AI搜索新生态?
  • 机器人关节模组CR认证全解析
  • ModbusRTU初学者指南:通信流程图解说明
  • 轮胎材质对循迹性能影响:系统学习笔记
  • 基于Vue的网络考试系统的设计与实现9p43h(程序 + 源码 + 数据库 + 调试部署 + 开发环境配置),配套论文文档字数达万字以上,文末可获取,系统界面展示置于文末
  • 单精度浮点数通俗解释:符号位、指数位、尾数位详解
  • 告别微信来回切换!1 个系统聚合所有账号,消息不漏接
  • 彻底解决haxm is not installed 的五大关键步骤(实战经验)
  • CANFD与CAN的区别:收发器设计对比图解说明
  • 基于视频孪生 + 空间智能双轮驱动的智慧工厂解决方案
  • 零基础理解AUTOSAR架构图的软件结构
  • 认知型解读水质传感器在智能净水系统中的角色
  • 企业数字化新选择:5款专业级免费低代码平台横向测评
  • 项目中JSON配置文件的最佳实践完整指南
  • 手把手解析RS232串口通信的初始化配置步骤
  • Multisim14.3从零实现:创建简单直流电路仿真
  • 基于C#的图书商城系统实现方案
  • DUT电磁兼容性设计:一文说清EMI抑制技术
  • USB转串口驱动安装后仍无效?超详细版排查流程
  • Batocera游戏整合包图解说明:适合全家人的怀旧游戏中心
  • 小程序添加业务域名
  • Keil添加文件高效管理技巧:提升项目组织效率
  • 图解说明2025机顶盒刷机包下载全过程
  • ​2026教师资格证报名照全攻略:要求·制作·审核避坑一次过审​
  • SSM校园社团信息管理系统6k87t(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
  • 一文说清波特率与比特率的区别概念
  • Android Jetpack Compose - Snackbar、Box