Opencv implements multi-target tracking

Table of contents

Opencv implements multi-target tracking code


Multi-object tracking is similar to single-object tracking, except that the instantiated trackers are different.

tracker = cv2.legacy.MultiTracker_create() #multi-target tracking
bbox1 = cv2.selectROI('tracking', image)
bbox2 = cv2.selectROI('tracking', image)
bbox3 = cv2.selectROI('tracking', image)
ok = tracker.add(cv2.legacy.TrackerKCF_create(),image,bbox1)
ok = tracker.add(cv2.legacy.TrackerKCF_create(),image, bbox2)
ok = tracker.add(cv2.legacy.TrackerKCF_create(),image, bbox3)

Opencv implements multi-target tracking code

The defect of this is that I must first specify the existence of several people in the video. Once the given bbox value is determined, it cannot be recognized when the number of people in the video increases.

import numpy as np
import cv2
import sys
'''
if len(sys.argv) != 2:
 print('Input video name is missing')
 exit()
'''
print('Select multiple tracking targets')
cv2.namedWindow("tracking")
camera = cv2.VideoCapture(r"E:\Python-Code/videodataset/enn.mp4")
#camera = cv2.VideoCapture(0)
tracker = cv2.legacy.MultiTracker_create() #多目标跟踪
# a= cv2.Tracker_c
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)
bbox3 = cv2.selectROI('tracking', image)
bbox4 = 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(cv2.legacy.TrackerKCF_create(),image,bbox1)
  ok = tracker.add(cv2.legacy.TrackerKCF_create(),image, bbox2)
  ok = tracker.add(cv2.legacy.TrackerKCF_create(),image, bbox3)
  ok = tracker.add(cv2.legacy.TrackerKCF_create(), image, bbox4)
  init_once = True
 ok, boxes = tracker.update(image)
 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, (0,0,255))
 cv2.imshow('tracking', image)
 k = cv2.waitKey(1)
 if k == 27 : break # esc pressed

Guess you like

Origin blog.csdn.net/weixin_45823221/article/details/128471987