news 2026/10/6 1:28:02

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/5 23:19:39

小程序添加业务域名

(7 封私信 / 38 条消息) 【微信小程序】web-view 无法打开该页面不支持打开 - 知乎

作者头像 李华
网站建设 2026/10/5 11:43:01

新手必看:用万用表区分贴片LED灯正负极

从零开始:用万用表轻松搞定贴片LED正负极识别 你有没有遇到过这种情况——手头有一堆小小的贴片LED,没标签、无型号,焊接前却分不清哪边是正极?一接反,灯不亮,甚至烧了。别急,这几乎是每个电子新…

作者头像 李华
网站建设 2026/9/29 9:29:13

一文说清TC3中I2C中断的工作原理

深入理解TC3中I2C中断:从硬件机制到实战优化在汽车电子和高可靠性嵌入式系统开发中,英飞凌AURIX™ TC3xx系列微控制器凭借其多核TriCore架构、功能安全支持以及丰富的外设集成能力,已成为ADAS、电机控制和车载网关等关键应用的首选平台。而在…

作者头像 李华
网站建设 2026/9/30 21:55:50

Kotlin 面向对象 - 装箱与拆箱

装箱与拆箱 在 Kotlin 中,装箱与拆箱涉及基本类型与它们的可空引用类型或泛型集合中的类型转换基本类型在大多数情况下直接对应 JVM 的原始类型,不涉及装箱当它们被用作可空类型或放入泛型集合时,会自动装箱为对应的包装类// 基本类型&#x…

作者头像 李华
网站建设 2026/10/4 6:08:29

图解说明2025机顶盒刷机包下载全过程

2025机顶盒刷机全攻略:从下载到刷入,手把手带你玩转固件升级 你是不是也受够了家里的机顶盒开机满屏广告、系统卡顿、不能装第三方App?别急—— 刷机 ,可能是你最该掌握的家庭影音“神技”。 2025年,越来越多的智能…

作者头像 李华
网站建设 2026/9/30 12:32:42

工业现场UART通信故障诊断:核心要点与解决路径

工业现场UART通信故障诊断:从“换线重启”到精准排障的实战指南在一家自动化设备厂的调试车间里,工程师老张正对着一台频繁报错的温控仪发愁。PLC显示的数据时准时乱,有时跳到999℃,有时直接断连。他试过换线、重启、甚至拍了下机…

作者头像 李华