视频中固定区域定位追踪

from __future__ import print_function
import sys
import time

import cv2
from random import randint

from matplotlib import pyplot as plt

from tracker import *
tracker = EuclideanDistTracker()

trackerTypes = ['BOOSTING', 'MIL', 'KCF', 'TLD', 'MEDIANFLOW', 'GOTURN', 'MOSSE', 'CSRT']

def createTrackerByName(trackerType):
    # Create a tracker based on tracker name
    if trackerType == trackerTypes[0]:
        tracker = cv2.legacy.TrackerBoosting_create()
    elif trackerType == trackerTypes[1]:
        tracker = cv2.legacy.TrackerMIL_create()
    elif trackerType == trackerTypes[2]:
        tracker = cv2.legacy.TrackerKCF_create()
    elif trackerType == trackerTypes[3]:
        tracker = cv2.legacy.TrackerTLD_create()
    elif trackerType == trackerTypes[4]:
        tracker = cv2.legacy.TrackerMedianFlow_create()
    elif trackerType == trackerTypes[5]:
        tracker = cv2.legacy.TrackerGOTURN_create()
    elif trackerType == trackerTypes[6]:
        tracker = cv2.legacy.TrackerMOSSE_create()
    elif trackerType == trackerTypes[7]:
        tracker = cv2.legacy.TrackerCSRT_create()
    else:
        tracker = None
        print('Incorrect tracker name')
        print('Available trackers are:')
        for t in trackerTypes:
            print(t)

    return tracker

if __name__ == '__main__':

    print("The Default tracking algo is CSRT \n"
    "Available tracking algos are: \n")
    for i in trackerTypes:
        print(i)

    # The default tracker is CSRT
    trackerType = "CSRT"
    # Capture frames from the camera
    # **************************摄像头 # 1代表打开外置摄像头,外置多个摄像头可依此枚举 0,1,  0代表电脑内置摄像头,

    videoPath = r"C:\Users\Think\Desktop\pythonProject\test.mp4"  #存在的视频
    cap = cv2.VideoCapture(0)
    #cap = cv2.VideoCapture(videoPath)
    ret, frame = cap.read()
    if not ret:
        print("Failed to capture frames from the camera.")
        sys.exit(1)

    bboxes = []
    colors = []
    bboxes = cv2.selectROIs('MultiTrackers', frame)

    for i in bboxes:
        colors.append((randint(64, 255), randint(64, 255), randint(64, 255)))

    print('Selected bounding boxes {}'.format(bboxes))      # Print the infomations of the selected bboxes
    #print('hhh',bboxes[0],bboxes[1],bboxes[2])
    cv2.destroyAllWindows()  #消除第一帧

# Create multiTracker objet
    multiTracker = cv2.legacy.MultiTracker_create()

    for bbox in bboxes:
        multiTracker.add(createTrackerByName(trackerType), frame, tuple(bbox))

    while cap.isOpened():  # Process the video & track objects
        ret, frame = cap.read()       
        if not ret:
            break
        # 如果选中框里面的内容发生了变化打印框的索引
        # print(i)
        time.sleep(2)   #更新选框的位置
        ret, boxes = multiTracker.update(frame)  # Update new boxes position
        #boxer_ids = multiTracker.update(boxes)  # 同一个物体会有相同的ID
        # Definate p1,p2 (upper-left and lower-right of the boxex)
        for i, newbox in enumerate(boxes):
            p1 = (int(newbox[0]), int(newbox[1]))
            p2 = (int(newbox[0] + newbox[2]), int(newbox[1] + newbox[3]))
            cv2.rectangle(frame, p1, p2, colors[i], 2, 1)  # Draw the box with a random color 参数表示依次为: (图片,长方形框左上角坐标, 长方形框右下角坐标, 字体颜色,字体粗细)
        cv2.imshow("MultiTracker", frame)       # Display the frame
        if cv2.waitKey(1) & 0xFF ==27:      # Quit when Esc is pressed
            break

cap.release()
cv2.destroyAllWindows()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值