Advertisement

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

阅读量:

文章目录

  • 1. 使用OpenCV实现目标跟踪的例子 Object Tracking using OpenCV (C++/Python)
  • 2. 下面将核心的几行代码单调提取出来(代码不能单独运行)
  • 3. 下面是完整可执行的跟踪代码

在这里插入图片描述

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)

全部评论 (0)

还没有任何评论哟~