opencv各算法对比:

程序接口:

#pip3 install opencv-contrib-python
import numpy as np
import cv2
import sys
 
 
class TRACKER(object):
    def __init__(self):
        self.trackerTypes = ['BOOSTING', 'MIL', 'KCF','TLD', 'MEDIANFLOW', 'GOTURN', 'MOSSE', 'CSRT']
        self.trackerNum=2
        self.tracker = cv2.MultiTracker_create()
 
    def createTrackerByName(self,num):
        # 通过跟踪器的名字创建跟踪器
        trackerType=self.trackerTypes[num]
        if trackerType == self.trackerTypes[0]:
            tracker = cv2.TrackerBoosting_create()
        elif trackerType == self.trackerTypes[1]: 
            tracker = cv2.TrackerMIL_create()
        elif trackerType == self.trackerTypes[2]:
            tracker = cv2.TrackerKCF_create()
        elif trackerType == self.trackerTypes[3]:
            tracker = cv2.TrackerTLD_create()
        elif trackerType == self.trackerTypes[4]:
            tracker = cv2.TrackerMedianFlow_create()
        elif trackerType == self.trackerTypes[5]:
            tracker = cv2.TrackerGOTURN_create()
        elif trackerType == self.trackerTypes[6]:
            tracker = cv2.TrackerMOSSE_create()
        elif trackerType == self.trackerTypes[7]:
            tracker = cv2.TrackerCSRT_create()
        else:
            tracker = None
            print('Incorrect tracker name')
            print('Available tracker name')
            
            for t in self.trackerTypes:
                print(t)
        return tracker
 
 
    def add(self,image, bbox):
        ok = self.tracker.add(self.createTrackerByName(self.trackerNum), image, bbox)
        return ok
 
    def clear(self,image,bbox):
        print(help(self.tracker.clear))
        print(help(self.tracker.empty))
        print(dir(self.tracker))
        ok = self.tracker.clear()
        ok = self.tracker.empty()
        return ok
 
    def update(self,image):
        ok, boxes = self.tracker.update(image)
        return ok,boxes
 
if __name__=="__main__":
    cv2.namedWindow("tracking")
    camera = cv2.VideoCapture("../siz.mp4")
 
 
    tracker = TRACKER()
 
 
 
 
    init_once = False
 
    ok, image=camera.read()
    if not ok:
        print('Failed to read video')
        exit()
 
    bbox1 = cv2.selectROI('tracking', image)
    bbox2 = cv2.selectROI('tracking', image)
 
    while camera.isOpened():
        ok, image=camera.read()
        if not ok:
            print ('no image to read')
            break
 
        if not init_once:
            ok = tracker.add( image, bbox1)
            ok = tracker.add( image, bbox2)
            init_once = True
 
        ok, boxes = tracker.update(image)
        print (ok, boxes)
 
        for newbox in boxes:
            p1 = (int(newbox[0]), int(newbox[1]))
            p2 = (int(newbox[0] + newbox[2]), int(newbox[1] + newbox[3]))
            cv2.rectangle(image, p1, p2, (255,0,0))
 
        cv2.imshow('tracking', image)
        k = cv2.waitKey(1)
        if k == 27 : 
            break # esc pressed

模型文件:https://download.csdn.net/download/qq_14845119/11242954