OpenCV——目标追踪

文章素材来源© Fu Xianjun. All Rights Reserved.

 目标追踪算法介绍

目标跟踪是计算机视觉领域的一个重要问题,目前广泛应用在体育赛事转播、安防监控和无人机、无人车、机器人等领域。

目标跟踪的研究领域

  • 单目标跟踪 - 给定一个目标,追踪这个目标的位置。
  • 多目标跟踪 - 追踪多个目标的位置
  • Person Re-ID - 行人重识别,是利用计算机视觉技术判断图像或者视频序列中是否存在特定行人的技术。广泛被认为是一个图像检索的子问题。给定一个监控行人图像,检索跨设备下的该行人图像。旨在弥补固定的摄像头的视觉局限,并可与行人检测/行人跟踪技术相结合。
  • MTMCT - 多目标多摄像头跟踪(Multi-target Multi-camera Tracking),跟踪多个摄像头拍摄的多个人
  • 姿态跟- 追踪人的姿态

 OpenCV包含八个(是的,就是八个!)单独的对象跟踪实现

  1. BOOSTING Tracker:基于相同的算法,用于为Haar级联(AdaBoost)背后的机器学习提供动力,但是像Haar级联一样,已有十多年的历史了。这个跟踪器很慢,不能很好地工作。逻辑原理和与其他算法做比较。 (最低OpenCV 3.0.0)
  2. MIL Tracker:比BOOSTING跟踪器更准确,但报告失败的工作很差。 (最低OpenCV 3.0.0)             
  3. KCF Tracker:核心相关滤波器。比BOOSTING和MIL更快。与MIL和KCF类似,不能很好地处理完全闭塞.(最低OpenCV 3.1.0)
  4. CSRT Tracker:判别相关滤波器(具有信道和空间可靠性)。趋向于比KCF更准确但稍慢。   (最低OpenCV 3.4.2)
  5. MedianFlow Tracker:报道失败的好工作;但是,如果运动中的跳跃太大,例如快速移动的物体,或者外观变化很快的物体,则模型将失败。 (最低OpenCV 3.0.0)
  6. TLD Tracker:TLD跟踪器非常容易出现误报。不建议使用此OpenCV对象跟踪器。                  (最低OpenCV 3.0.0)
  7. MOSSE Tracker:非常非常快。不如CSRT或KCF准确,但如果你需要纯粹的速度,这是一个很好的选择。 (最低OpenCV 3.4.1)
  8. GOTURN Tracker:OpenCV中唯一的基于深度学习的对象检测器。它需要运行其他模型文件  

 OpenCV目标追踪选择

  1. 当需要更高的对象跟踪精度并且可以容忍更慢的FPS吞吐量时,请使用CSRT
  2. 当需要更快的FPS吞吐量时使用KCF,但可以处理稍低的对象跟踪精度。
  3. 当需要纯粹的速度时使用MOSSE

 知识储备:Contrib包的安装

OpenCV——目标追踪_第1张图片OpenCV——目标追踪_第2张图片

OpenCV目标追踪的使用方法

              1.创建追踪器方法对象

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

}

2.实例化追踪器对象

trackers = cv2.MultiTracker_create()

3.选择目标ROI

key = cv2.waitKey(100) & 0xFF

if key == ord("s"):

        # 选择一个区域,按s

        box = cv2.selectROI("Frame", frame, fromCenter=False,

            showCrosshair=True)

        # 创建一个新的追踪器

        tracker = OPENCV_OBJECT_TRACKERS["csrt"]()

        trackers.add(tracker, frame, box)

4.绘制区域

(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)

你可能感兴趣的:(opencv,python)