news 2026/5/1 5:43:40

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/4/3 6:44:30

推荐系统用户画像构建:零基础入门教程

推荐系统用户画像构建:从零开始的实战指南你有没有想过,为什么抖音总能“猜中”你想看的视频?为什么淘宝首页推荐的商品,好像知道你最近在找什么?这背后的核心技术之一,就是用户画像。在信息过载的时代&…

作者头像 李华
网站建设 2026/4/25 1:07:44

TPS22965负载开关控制电路设计操作指南

用好一颗小芯片,省电又稳压:TPS22965负载开关实战设计全解析你有没有遇到过这样的问题?系统一上电,Wi-Fi模块“啪”地一下拉低主电源,MCU直接复位;设备待机几天就没电了,查来查去发现是某个传感…

作者头像 李华
网站建设 2026/4/30 8:54:09

nmodbus4类库使用教程:从零实现TCP客户端实战案例

从零构建工业通信客户端:用 nModbus4 实现 Modbus TCP 数据交互实战你有没有遇到过这样的场景?手头有一台支持 Modbus 协议的 PLC 或传感器,想通过上位机读取它的温度、压力数据,甚至远程控制继电器。但面对一堆寄存器地址和功能码…

作者头像 李华
网站建设 2026/4/28 20:58:18

display driver uninstaller 结合 DDU 模式进行安全卸载示例

显卡驱动清不干净?一招“DDU 模式”彻底卸载,告别蓝屏与性能下降 你有没有遇到过这样的情况: 刚更新完显卡驱动,结果开机黑屏;玩游戏突然花屏、掉帧;甚至系统频繁蓝屏,提示“VIDEO_TDR_FAILURE…

作者头像 李华
网站建设 2026/4/16 20:59:19

数字频率计基础入门:新手必看的零基础讲解指南

从零开始搞懂数字频率计:每个电子新手都该掌握的测量利器你有没有遇到过这样的情况?调试一个单片机系统,发现LED闪烁不对劲;或者手里的晶振标称是16MHz,但程序跑起来总觉得时序有问题。这时候,你最需要的不…

作者头像 李华
网站建设 2026/4/18 16:22:42

通过API接口获取历史数据进行分析。

在周末休市期间,通过API接口获取历史数据进行分析,是进行研究、策略回测和优化投资组合的绝佳时机。StockTv为这类需求提供了稳定可靠的数据支持。 下面这个表格汇总了周末通过API获取和分析历史数据的主要环节和常用工具,你可以快速了解全貌…

作者头像 李华