首页 > 其他分享 >OpenCV实现多目标追踪(1)

OpenCV实现多目标追踪(1)

时间:2023-05-10 16:47:32浏览次数:35  
标签:frame cv2 目标 OpenCV legacy tracker create 追踪

目录

本文利用OpenCV已有的七种目标追踪算法,通过对传入视频中感兴趣的目标对象进行框选,实现实时追踪框选对象。

步骤:

  • 首先需要配置相应参数并创建MultiTracker对象,其次,读取并处理视频的每一帧,接着,框选ROI区域,然后,给MultiTracker对象添加实际的追踪算法,最后,对每一帧进行进行目标追踪。

1.配置参数

ap = argparse.ArgumentParser()
ap.add_argument("-v", "--video", type=str,
	help="path to input video file")
ap.add_argument("-t", "--tracker", type=str, default="kcf",
	help="OpenCV object tracker type")
args = vars(ap.parse_args())

2.实例化追踪器

# opencv已经实现了的追踪算法
OPENCV_OBJECT_TRACKERS = {
	"csrt": cv2.legacy.TrackerCSRT_create,#比KCF稍精确,但速度不佳
	"kcf": cv2.legacy.TrackerKCF_create,#有遮挡的情况下表现不佳
	"boosting": cv2.legacy.TrackerBoosting_create,#速度较慢,并且表现不好
	"mil": cv2.legacy.TrackerMIL_create,#失败率比较高
	"tld": cv2.legacy.TrackerTLD_create,#在多帧遮挡下效果最好。但是TLD的误报非常多
	"medianflow": cv2.legacy.TrackerMedianFlow_create,#当运动是可预测的并且没有遮挡时,效果非常好,但是对于快速跳动或快速移动的物体,模型会失效。
	"mosse": cv2.legacy.TrackerMOSSE_create#速度真心快,但是不如CSRT和KCF的准确率那么高
}

# 实例化OpenCV's multi-object tracker
trackers = cv2.legacy.MultiTracker_create()#创建MultiTracker对象
vs = cv2.VideoCapture(args["video"])

3.处理视频的每一帧

 # 视频流
while True:
	# 取当前帧
	frame = vs.read()
	# (true, data)
	frame = frame[1]
	# 到头了就结束
	if frame is None:
		break

	# resize每一帧
	(h, w) = frame.shape[:2]
	width=600
	r = width / float(w)
	dim = (width, int(h * r))
	frame = cv2.resize(frame, dim, interpolation=cv2.INTER_AREA)

        # 追踪结果
	(success, boxes) = trackers.update(frame)#更新目标追踪器,返回两个参数,一个是是否追踪成功,另一个是追踪到的ROI框

4.框选ROI并追踪


	# 绘制区域
	for box in boxes:
		(x, y, w, h) = [int(v) for v in box]#box是一个浮点型的ndarray,绘图时需要转成int型
		cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)

	# 显示
	cv2.imshow("Frame", frame)
	key = cv2.waitKey(100) & 0xFF

	if key == ord("s"):
		# 选择一个区域,按s
		box = cv2.selectROI("Frame", frame, fromCenter=False,
			showCrosshair=True)#"Frame":窗口名;frame:图像名;showCrosshair:是否在矩形框里画十字线,默认为True;fromCenter:是否在矩形框里画十字线,默认为False。


		# 创建一个新的追踪器
		tracker = OPENCV_OBJECT_TRACKERS["csrt"]()#创建一个实际的目标追踪器
		trackers.add(tracker, frame, box)#将选择好的目标添加到追踪器上

	# 退出
	elif key == 27:
		break
vs.release()
cv2.destroyAllWindows()

标签:frame,cv2,目标,OpenCV,legacy,tracker,create,追踪
From: https://www.cnblogs.com/lushuang55/p/17366774.html

相关文章

  • 限定源端口访问目标
    限定源端口访问目标1.1.起因在渗透测试时,客户需要对我们的测试IP进行加白,但是此次客户要求精确到固定端口或者小范围端口(不能1-65535),根据以前的经验,默认是加白IP和全端口,因为代理建立连接使用的端口是随机的,所以这次算是从头查找资料总结一下各种指定源端口的方式。这里的端......
  • 利用AidLux实现可见光巡检中的目标锁定
    用AidLux实现可见光巡检中的目标锁定。本项目参考AidLux4月实战训练营内容:可见光巡检中的目标锁定。利用AIdlux平台和手机移动端算力,轻松落地部署基于可见光巡检项目.1.首先在手机上部署相关环境 2.在调用摄像头的基础上添加SORT功能,将实时识别的YOLOV8边框导入SORT,实现对电......
  • 利用AidLux实现可见光巡检中的目标锁定
    用AidLux实现可见光巡检中的目标锁定。本项目参考AidLux4月实战训练营内容:可见光巡检中的目标锁定。利用AIdlux平台和手机移动端算力,轻松落地部署基于可见光巡检项目.1.首先在手机上部署相关环境2.在调用摄像头的基础上添加SORT功能,将实时识别的YOLOV8边框导入SORT,实现对电力目标......
  • Building wheel for opencv-python (pyproject.toml) ,安装命令增加 --verbose 参数
    Mac安装paddlehub出现Buildingwheelsforcollectedpackages:opencv-python,ffmpy,jieba,seqeval,futureBuildingwheelforopencv-python(pyproject.toml)...解决方法pipinstallopencv-python-ihttps://pypi.tuna.tsinghua.edu.cn/simple--verbose......
  • 5.8团队绩效冲刺目标以及"团队不淘汰"理由说明
    因为自己是团队贡献值最低的成员,同时急需技术上的提升,体现自我价值,故通过此次博客来规划期末前要达到的目标。首先说明考核前自己必须达到的目标。熟练掌握数据库增删改查,能够自主完成考题等基本需求,能够完成对产品需求的实际应用分析,并能够在考核中实现对应功能。在此后的学习......
  • 链路追踪系统Skywalking接入说明
    目录应用修改引入依赖日志模板注意事项部署修改Dockerfile一般应用spring-cloud-gateway部署脚本dockerdocker-compose应用修改引入依赖目的是实现手动获取链路信息、链路信息日志记录等扩展功能。<properties><skywalking.version>8.14.0</skywalking.version><......
  • 一种基于虚拟摄像头、NDI、OBS以及yolo的多机视觉目标检测方案
    一种基于虚拟摄像头、NDI、OBS以及yolo的多机视觉目标检测方案绪论近来为了实现某种实时展示效果,笔者希望通过一套方案实现在两台主机上分别运行仿真平台以及视觉深度学习算法。透过对当下较为流行的几种方案的调研,笔者最后决定了采用OBS采集并透过NDI协议在局域网内进行广播,再......
  • opencv图片内存占用过大优化
    //读取图片文件到内存std::ifstreamfile(img.toStdString(),std::ios::binary);std::vector<char>buffer((std::istreambuf_iterator<char>(file)),std::istreambuf_iterator<char>());cv::Matimage=cv::imdecode(cv::Ma......
  • 在一个进程中通过队列的方式缓存opencv视频帧,并在另一个进程中读取
    import_threadimportqueueimporttimeimportcv2fromflaskimportFlask,Responseapp=Flask(__name__)max_size=3q1=queue.Queue(maxsize=max_size)q2=queue.Queue(maxsize=max_size)open_flag=1defopen_and_show(ip_camera_url,title):......
  • python 实现小车经过多个目标点
    代码   问题一  fromgeometry_msgs.msgimportPoseStamped如果geometry_msgs没下载sudoapt-getinstallros-<your_ros_version>-geometry-msgs 问题二: 没有初始化节点,rospy.init_node(‘name’)来初始化节点 在ROS中,初始化节点是一个必要的步骤,因为R......