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()
视频中固定区域定位追踪
最新推荐文章于 2024-07-30 17:23:09 发布