使用OpenCV实现目标跟踪的例子 Object Tracking using OpenCV (C++/Python)


在这里插入图片描述

1. 使用OpenCV实现目标跟踪的例子 Object Tracking using OpenCV (C++/Python)

跟踪:https://www.learnopencv.com/object-tracking-using-opencv-cpp-python/

2. 下面将核心的几行代码单调提取出来(代码不能单独运行)

import cv2 

tracker_type =  'KCF'  # 指定某种跟踪算法
tracker = cv2.Tracker_create(tracker_type)  # 创建跟踪器

bbox = cv2.selectROI(frame, False)  # 读取第一帧,手动框一个目标

ok = tracker.init(frame, bbox)  # 初始化跟踪器
while True:
	ok, bbox = tracker.update(frame)  # 输入一张新的图片,输出在当前图片中的预测框(预测的输入只需新的一帧)
	# 使用 bbox 在图片中画出目标框

3. 下面是完整可执行的跟踪代码

# python3.7 路径不能包含中文
import os
import cv2   # 3.4.2  
import sys

print(cv2.__version__)  # 3.4.2  

(major_ver, minor_ver, subminor_ver) = cv2.__version__.split('.')

if __name__ == '__main__':

    # Set up tracker.
    # Instead of MIL, you can also use

    tracker_types = ['BOOSTING', 'MIL', 'KCF', 'TLD', 'MEDIANFLOW', 'GOTURN', 'MOSSE', 'CSRT']
    tracker_type = tracker_types[6]

    if int(minor_ver) < 3:
        tracker = cv2.Tracker_create(tracker_type)
    else:
        if tracker_type == 'BOOSTING':
            tracker = cv2.TrackerBoosting_create()
        if tracker_type == 'MIL':
            tracker = cv2.TrackerMIL_create()
        if tracker_type == 'KCF':
            tracker = cv2.TrackerKCF_create()
        if tracker_type == 'TLD':
            tracker = cv2.TrackerTLD_create()
        if tracker_type == 'MEDIANFLOW':
            tracker = cv2.TrackerMedianFlow_create()
        if tracker_type == 'GOTURN':
            tracker = cv2.TrackerGOTURN_create()
        if tracker_type == 'MOSSE':
            tracker = cv2.TrackerMOSSE_create()
        if tracker_type == "CSRT":
            tracker = cv2.TrackerCSRT_create()

    # Read video
    # video = cv2.VideoCapture("F:\\DataSet\\VOT_video\\img2avi\\hangpaizixinche.avi")
    # video = cv2.VideoCapture("F:\\DataSet\\VOT_video\\img2avi\\fukanche2.avi")
    # video = cv2.VideoCapture("F:\\DataSet\\VOT_video\\img2avi\\5zuqiu2.avi")

    # Exit if video not opened.
    # if not video.isOpened():
    #     print("Could not open video")
    #     sys.exit()

    # Read first frame.
    # ok, frame = video.read()
    # if not ok:
    #     print('Cannot read video file')
    #     sys.exit()

    # Define an initial bounding box

    bbox = (702, 357, 65, 133)
    img_folder = "F:\\DataSet\\VOT_video\\imgs\\hangpaizixinche"
    # img_folder = "F:\\DataSet\\TSD\\TSD-Signal-00269"
    img_names = os.listdir(img_folder)
    img_names.sort()
    print(img_names)
    img_path = os.path.join(img_folder, img_names[0])
    frame = cv2.imread(img_path)

    # Uncomment the line below to select a different bounding box
    bbox = cv2.selectROI(frame, False)
    print(bbox)
    # Initialize tracker with first frame and bounding box
    ok = tracker.init(frame, bbox)  # 使用第一个bbox初始化第一帧图片

    for i in range(1, len(img_names)):
        img_path = os.path.join(img_folder, img_names[i])
        # Read a new frame
        # ok, frame = video.read()
        # cv2.waitKey(1)
        frame = cv2.imread(img_path)
        ok = True
        if not ok:
            print(" if not ok:")
            break

        # Start timer
        timer = cv2.getTickCount()

        # Update tracker
        ok, bbox = tracker.update(frame)  # 传入一张新的图片,输出一个新的bbox

        # Calculate Frames per second (FPS)
        fps = cv2.getTickFrequency() / (cv2.getTickCount() - timer)

        # Draw bounding box
        if ok:
            # Tracking success
            p1 = (int(bbox[0]), int(bbox[1]))
            p2 = (int(bbox[0] + bbox[2]), int(bbox[1] + bbox[3]))
            cv2.rectangle(frame, p1, p2, (255, 0, 0), 2, 1)  # 在当前图像上画出预测的bbox 矩形框
        else:
            # Tracking failure
            cv2.putText(frame, "Tracking failure detected", (100, 80), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (0, 0, 255), 2)

        # Display tracker type on frame
        cv2.putText(frame, tracker_type + " Tracker", (100, 20), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (50, 170, 50), 2)

        # Display FPS on frame
        cv2.putText(frame, "FPS : " + str(int(fps)), (100, 50), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (50, 170, 50), 2)

        # Display result
        cv2.imshow("Tracking", frame)

        # Exit if ESC pressed
        k = cv2.waitKey(1) & 0xff
        if k == 27:
            break

(END)

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值