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
评论(0)
您还未登录,请登录后发表或查看评论