信息管理系统网站开发教程,网站建立网络优化,做网站公司昆山,开发公司做管理公司天然气怎么做帐基于 OpenCV 的跟踪算法有多种#xff0c;每种算法都有其特定的应用场景和优缺点。以下是一些常见的基于 OpenCV 的目标跟踪算法#xff1a;
1. BOOSTING 跟踪器
描述#xff1a;基于 AdaBoost 算法的跟踪器。它是一种早期的跟踪算法#xff0c;使用的是基于弱分类器的强…基于 OpenCV 的跟踪算法有多种每种算法都有其特定的应用场景和优缺点。以下是一些常见的基于 OpenCV 的目标跟踪算法
1. BOOSTING 跟踪器
描述基于 AdaBoost 算法的跟踪器。它是一种早期的跟踪算法使用的是基于弱分类器的强分类器方法。优点适用于初学者易于理解和实现。缺点对目标的外观变化不够鲁棒容易受到遮挡的影响。使用cv2.TrackerBoosting_create()
2. MIL (Multiple Instance Learning) 跟踪器
描述基于多实例学习的跟踪算法。通过考虑正负样本的集合来提高跟踪的鲁棒性。优点比 BOOSTING 更鲁棒尤其是在目标部分遮挡的情况下。缺点计算开销较大速度较慢。使用cv2.TrackerMIL_create()
3. KCF (Kernelized Correlation Filters) 跟踪器
描述基于核相关滤波的跟踪算法。KCF 通过使用循环结构和傅里叶变换极大地提高了跟踪速度。优点跟踪速度快适合实时应用。缺点对尺度变化不够敏感对长时间的遮挡不鲁棒。使用cv2.TrackerKCF_create()
4. TLD (Tracking-Learning-Detection) 跟踪器
描述一种综合了跟踪、学习和检测的算法。TLD 可以检测失败并自动重新定位目标。优点适合处理长时间跟踪和目标重新检测。缺点计算复杂度高可能较慢。使用cv2.TrackerTLD_create()
5. MEDIANFLOW 跟踪器
描述基于光流的方法通过对前后向运动估计进行检查确保跟踪的可靠性。优点在目标平滑运动的情况下非常可靠对失败检测敏感。缺点对快速运动或突然的运动变化不鲁棒。使用cv2.TrackerMedianFlow_create()
6. GOTURN 跟踪器
描述基于深度学习的目标跟踪算法。使用一个预训练的神经网络来预测目标的运动。优点可以处理大范围的目标外观变化。缺点需要在使用前下载预训练模型并且依赖于模型的质量。使用cv2.TrackerGOTURN_create()
7. MOSSE (Minimum Output Sum of Squared Error) 跟踪器
描述基于相关滤波的快速跟踪算法使用最小化输出误差平方和的滤波器。优点速度非常快适合实时应用特别是在低算力设备上。缺点对尺度变化和外观变化敏感鲁棒性一般。使用cv2.TrackerMOSSE_create()
8. CSRT (Discriminative Correlation Filter with Channel and Spatial Reliability) 跟踪器
描述基于相关滤波器的高级跟踪算法通过考虑通道和空间可靠性来增强跟踪效果。优点对尺度变化和旋转更加鲁棒跟踪精度较高。缺点相比 KCF速度稍慢但在大多数情况下仍能保持实时性能。使用cv2.TrackerCSRT_create()
不同的跟踪算法各有优劣选择合适的算法取决于应用场景和需求。例如KCF 和 MOSSE 适合实时性要求高的应用而 CSRT 和 GOTURN 在目标外观变化较大时表现更好。OpenCV 提供了一个易于使用的接口可以根据实际需求轻松切换不同的跟踪算法。
基于原生的追踪
使用OpenCV库实现基于视频的对象追踪。通过以下步骤和Python代码您将能够选择不同的追踪器并对视频中的对象进行实时追踪。
步骤 1: 导入必要的库
首先我们需要导入一些必要的Python库包括argparse、time、cv2 (OpenCV) 和 numpy。
import argparse
import time
import cv2
import numpy as np步骤 2: 设置参数解析
使用argparse库来解析命令行参数。我们将指定输入视频文件的路径以及选择的追踪器类型。
ap argparse.ArgumentParser()
ap.add_argument(-v, --video, typestr, helppath to input video file)
ap.add_argument(-t, --tracker, typestr, defaultkcf, helpOpenCV object tracker type)
args vars(ap.parse_args())步骤 3: 定义支持的追踪器
在OpenCV中有多种对象追踪器可用。我们将它们存储在一个字典中便于后续使用。
OPENCV_OBJECT_TRACKERS {csrt: cv2.TrackerCSRT_create,kcf: cv2.TrackerKCF_create,boosting: cv2.TrackerBoosting_create,mil: cv2.TrackerMIL_create,tld: cv2.TrackerTLD_create,medianflow: cv2.TrackerMedianFlow_create,mosse: cv2.TrackerMOSSE_create
}步骤 4: 初始化追踪器和视频流
我们初始化一个多对象追踪器并打开视频文件。
trackers cv2.MultiTracker_create()
vs cv2.VideoCapture(args[video])步骤 5: 处理视频帧
接下来我们读取视频中的每一帧并对其进行缩放处理然后使用追踪器更新追踪状态并绘制追踪的边框。
while True:frame vs.read()frame frame[1]if frame is None:break(h, w) frame.shape[:2]width 600r width / float(w)dim (width, int(h * r))frame cv2.resize(frame, dim, interpolationcv2.INTER_AREA)(success, boxes) trackers.update(frame)for box in boxes:(x, y, w, h) [int(v) for v in box]cv2.rectangle(frame, (x, y), (x w, y h), (0, 255, 0), 2)cv2.imshow(Frame, frame)key cv2.waitKey(100) 0xFFif key ord(s):box cv2.selectROI(Frame, frame, fromCenterFalse, showCrosshairTrue)tracker OPENCV_OBJECT_TRACKERS[args[tracker]]()trackers.add(tracker, frame, box)elif key 27:break
vs.release()
cv2.destroyAllWindows()总结
import argparse
import time
import cv2
import numpy as np# 配置参数
ap argparse.ArgumentParser()
ap.add_argument(-v, --video, typestr,helppath to input video file)
ap.add_argument(-t, --tracker, typestr, defaultkcf,helpOpenCV object tracker type)
args vars(ap.parse_args())# opencv已经实现了的追踪算法OPENCV_OBJECT_TRACKERS {csrt: cv2.TrackerCSRT_create,kcf: cv2.TrackerKCF_create,boosting: cv2.TrackerBoosting_create,mil: cv2.TrackerMIL_create,tld: cv2.TrackerTLD_create,medianflow: cv2.TrackerMedianFlow_create,mosse: cv2.TrackerMOSSE_create
}# 实例化OpenCVs multi-object tracker
trackers cv2.MultiTracker_create()
vs cv2.VideoCapture(args[video])# 视频流
while True:# 取当前帧frame vs.read()# (true, data)frame frame[1]# 到头了就结束if frame is None:break# resize每一帧(h, w) frame.shape[:2]width600r width / float(w)dim (width, int(h * r))frame cv2.resize(frame, dim, interpolationcv2.INTER_AREA)# 追踪结果(success, boxes) trackers.update(frame)# 绘制区域for box in boxes:(x, y, w, h) [int(v) for v in box]cv2.rectangle(frame, (x, y), (x w, y h), (0, 255, 0), 2)# 显示cv2.imshow(Frame, frame)key cv2.waitKey(100) 0xFFif key ord(s):# 选择一个区域按sbox cv2.selectROI(Frame, frame, fromCenterFalse,showCrosshairTrue)# 创建一个新的追踪器tracker OPENCV_OBJECT_TRACKERS[args[tracker]]()trackers.add(tracker, frame, box)# 退出elif key 27:break
vs.release()
cv2.destroyAllWindows()通过上述步骤和代码可以实现一个简单的视频对象追踪应用该应用支持多种追踪算法并允许用户实时选择和追踪视频中的对象。这种技术在许多领域都有广泛的应用包括安全监控、人机交互和自动驾驶车辆等。
检测模型的跟踪
检测模型 使用Python、OpenCV、dlib和多进程处理视频中的实时对象跟踪。以下是具体步骤及相关代码片段
1. 设置和参数解析
导入必要的库并设置参数解析处理输入如视频文件路径和模型配置。
from utils import FPS
import multiprocessing
import numpy as np
import argparse
import dlib
import cv22. 初始化深度学习模型
加载预训练的Caffe模型进行对象检测。
net cv2.dnn.readNetFromCaffe(args[prototxt], args[model])3. 视频流处理
从指定的文件开始视频捕捉并准备处理帧。
vs cv2.VideoCapture(args[video])4. 帧处理
调整帧大小并转换为RGB格式进行处理。如果检测到的对象置信度高于阈值则初始化对象跟踪。
rgb cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)5. 对象检测和跟踪
对初次检测到的对象创建跟踪器并使用多进程处理。
p multiprocessing.Process(targetstart_tracker, args(bb, label, rgb, iq, oq))
p.daemon True
p.start()6. 追踪器更新和结果输出
每个跟踪器获取新的帧更新位置并输出跟踪结果。
outputQueue.put((label, (startX, startY, endX, endY)))7. 视频输出和显示
如果指定了输出文件将处理后的帧写入视频文件。显示处理后的帧并在用户按下ESC键时停止。
writer.write(frame)
key cv2.waitKey(1) 0xFF
if key 27:break8. 清理和资源释放
停止FPS计时释放视频文件和窗口资源。
fps.stop()
writer.release()
cv2.destroyAllWindows()
vs.release()代码地址多目标追踪