main.py

import cv2
from tracker import *
import time# 进行追踪
tracker = EuclideanDistTracker()  # 这个函数通过获取同一物体不同时刻的boundingbox的坐标从而实现对其的追踪# 导入想要进行tracking的视频,要求拍摄视频的过程中摄像头是保持静止状态的
cap = cv2.VideoCapture(0)# 从导入的视频中找到正在移动的物体
object_detector = cv2.createBackgroundSubtractorMOG2(history=100, varThreshold=40)  # 对参数进行调整则会改变捕捉移动物体的精准性while True:ret, frame = cap.read()height, width, _ =frame.shape  # 得出视频画面的大小,从而去方便计算出感兴趣区域所在的位置print(height, width)  # 720,1280# 设置一个感兴趣区域,让处理(对物体的detection和tracking)只关注于感兴趣区域,从而减少一些计算量也让检测变得简单一些roi = frame[200: 600, 200: 600]# 物体检测  (根据需要可以将该部分代码换成比如行人检测、汽车检测等等)mask = object_detector.apply(roi)  # 通过加一个蒙版,更加清晰的显示出移动中的物体,即只留下白色的移动的物体。_, mask = cv2.threshold(mask, 254, 255, cv2.THRESH_BINARY)  # 去除移动物体被检测到的时候所附带的阴影(阴影为灰色)contours, _ = cv2.findContours(mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)  # 找到视频中物体的轮廓detections = []  # 用于存放boundingbox的起始点坐标、宽、高for cnt in contours:# 计算出每个轮廓内部的面积,并根据面积的大小去除那些不必要的噪声(比如树、草等等)area = cv2.contourArea(cnt)if area > 100:# cv2.drawContours(roi, [cnt], -1, (0, 255, 0), 2)  # 画出移动物体的轮廓x, y, w, h = cv2.boundingRect(cnt)detections.append([x, y, w, h])time.sleep(1)# 物体追踪boxer_ids = tracker.update(detections)  # 同一个物体会有相同的ID# print(boxer_ids)for box_id in boxer_ids:x, y, w, h, id = box_idcv2.putText(roi, "Obj" + str(id), (x, y - 15), cv2.FONT_ITALIC, 0.7, (255, 0, 0), 2)cv2.rectangle(roi, (x, y), (x + w, y + h), (0, 255, 0), 2)  # 根据移动物体的轮廓添加boundingboxprint(detections)cv2.imshow("Frame", frame)  # 打印结果# cv2.imshow("Mask", mask)  # 打印出蒙版# cv2.imshow("ROI", roi)  # 打印出你想要的ROI在哪key = cv2.waitKey(30)if key == 27:breakcap.release()
cv2.destroyAllWindows()

track.py

import mathclass EuclideanDistTracker:def __init__(self):# Store the center positions of the objectsself.center_points = {}# Keep the count of the IDs# each time a new object id detected, the count will increase by oneself.id_count = 0def update(self, objects_rect):# Objects boxes and idsobjects_bbs_ids = []# Get center point of new objectfor rect in objects_rect:x, y, w, h = rectcx = (x + x + w) // 2cy = (y + y + h) // 2# Find out if that object was detected alreadysame_object_detected = Falsefor id, pt in self.center_points.items():dist = math.hypot(cx - pt[0], cy - pt[1])if dist < 25:self.center_points[id] = (cx, cy)print(self.center_points)objects_bbs_ids.append([x, y, w, h, id])same_object_detected = Truebreak# New object is detected we assign the ID to that objectif same_object_detected is False:self.center_points[self.id_count] = (cx, cy)objects_bbs_ids.append([x, y, w, h, self.id_count])self.id_count += 1# Clean the dictionary by center points to remove IDS not used anymorenew_center_points = {}for obj_bb_id in objects_bbs_ids:_, _, _, _, object_id = obj_bb_idcenter = self.center_points[object_id]new_center_points[object_id] = center# Update dictionary with IDs not used removedself.center_points = new_center_points.copy()return objects_bbs_ids

https://download.csdn.net/download/Doomer_0/81095332https://download.csdn.net/download/Doomer_0/81095332

python移动追踪目标检测相关推荐

  1. 使用Python,OpenCV检测摄像机到标记对象的距离

    使用Python,OpenCV检测摄像机到标记对象的距离 1. 效果图 2. 三角形相似性是什么? 3. 三角形相似性检测距离原理 4. 使用Python,OpenCV检测标记对象 5. 源码 参考 ...

  2. 使用Python和OpenCV检测图像中的条形码

    使用Python和OpenCV检测图像中的条形码 1. 效果图 2. 算法的步骤 3. 源码 参考 这篇博客将介绍使用计算机视觉和图像处理技术进行条形码检测的必要步骤,并演示使用Python编程语言和 ...

  3. python使用正则表达式检测给定的URL地址是否合法

    python使用正则表达式检测给定的URL地址是否合法 # python使用正则表达式检测给定的URL地址是否合法 # python使用正则表达式检测给定的URL地址是否合法 # Check if a ...

  4. OpenCV + python 实现人脸检测(基于照片和视频进行检测)

    OpenCV + python 实现人脸检测(基于照片和视频进行检测) Haar-like 通俗的来讲,就是作为人脸特征即可. Haar特征值反映了图像的灰度变化情况.例如:脸部的一些特征能由矩形特征 ...

  5. 使用Python和OpenCV检测图片上的条形码

    这篇博文的目的是应用计算机视觉和图像处理技术,展示一个条形码检测的基本实现.我所实现的算法本质上基于StackOverflow 上的这个问题,浏览代码之后,我提供了一些对原始算法的更新和改进. 首先需 ...

  6. python实现多语言语种识别_用Python进行语言检测

    最近正好碰到这个需求,总结一下用Python进行语言检测的方法. 1.用unicode编码检测 汉字.韩文.日文等都有对应的unicode字符集范围,只要用正则表达式匹配出来即可. 在判断的时候,往往 ...

  7. python视频人脸检测_OpenCV + python 实现人脸检测(基于照片和视频进行检测)

    OpenCV + python 实现人脸检测(基于照片和视频进行检测) Haar-like 通俗的来讲,就是作为人脸特征即可. Haar特征值反映了图像的灰度变化情况.例如:脸部的一些特征能由矩形特征 ...

  8. python批量telnet检测IP地址的端口是否开放

    python批量telnet检测IP地址的端口是否开放 需求 代码 示例 需求 需要检查多个端口是否开放,没有找到第三方工具和服务来快速测通,就自己用python写了个脚本.原理是通过telnet来实 ...

  9. 《Python与硬件项目案例》— 基于Python的口罩检测与指纹识别签到系统设计

    <Python与硬件项目案例>- 基于Python的口罩检测与指纹识别签到系统设计 目录 <Python与硬件项目案例>- 基于Python的口罩检测与指纹识别签到系统设计 1 ...

最新文章

  1. [数分提高]2014-2015-2第6教学周第2次课(2015-04-09)
  2. 【VMware中搭建iOS开发环境的引导工具】
  3. dubbo请求调用过程分析
  4. XSS-Game level 12
  5. php评论倒序 zblog_zblogPHP评论链接加密并美化跳转的完美方法
  6. Google手机移动网站适配(双向注释)
  7. 强人工智能:抑制神经元的意义
  8. 基于91助手实现80/54坐标转换到2000大地坐标的七参数计算
  9. [电路笔记]三相电路
  10. 两张3百多万的表关联查询速度优化
  11. msg1500说明书_MSG1500刷机笔记
  12. 【原创 深度学习与TensorFlow 动手实践系列 - 4】第四课:卷积神经网络 - 高级篇...
  13. 深度学习中需要的矩阵计算
  14. 为PDF扫描文件添加书签
  15. 启动本地mysql的几种方式
  16. 公博评级06代表什么_钱币公博评级上72(05)什么意思?
  17. 计算机与现代教育的英语作文,雅思写作高分范文:电脑是否现代教育所必须?...
  18. 许愿墙 – javaee 项目实战(一)
  19. 二维火 Android 云收银模块化架构实践
  20. Android电子书阅读器小程序(txt)

热门文章

  1. 2022年全球及中国镍储量、产量及消费量分析:镍现货价格为23563.6美元/吨[图]
  2. 短短 146 天就成为 Apache APISIX Committer,我是怎么做到的?
  3. 国内有哪些创业大赛报名网站?|创成汇
  4. SAP中负库存的相关设定
  5. 用户案例|告别传统金融消息架构:Apache Pulsar 在平安证券的实践
  6. android 铃声设置失败,Android铃声设置错误
  7. 机器人导论(第四版)学习笔记——第三章
  8. 计算机网络技术基础 第2版 参考答案,计算机网络技术基础第2版习题答案
  9. 小游戏制作——猜数字
  10. 爱可生DBaaS数据库云平台入选《创新100—2022数智化场景实践》