Сначала я создаю список для добавления центроидов, затем в цикле while я беру кадр и делаю некоторые шаги, которые я перечисляю bwlow.1. Вычитание фона 2. Нахождение контура 3. Расчет центроида для всех объектов в кадре После нахождения центроида я добавляю все центроиды в мой ранее созданный список.Затем для каждого объекта я пытаюсь нарисовать траекторию всех объектов.
cap = cv2.VideoCapture("example_01.mp4")
pts = deque()
avg = None
while True:
ret,frame = cap.read()
flag = True
frame = imutils.resize(frame, width = 500)
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
gray = cv2.GaussianBlur(gray, (21,21), 0)
if avg is None:
avg = gray.copy().astype("float")
continue
cv2.accumulateWeighted(gray, avg, 0.5)
frameDelta = cv2.absdiff(gray, cv2.convertScaleAbs(avg))
thresh = cv2.threshold(frameDelta, 3, 255, cv2.THRESH_BINARY)[1]
thresh2 = cv2.dilate(thresh, None, iterations=2)
erode = cv2.erode(thresh2, None, iterations=2)
cnts = cv2.findContours(erode.copy(), cv2.RETR_EXTERNAL,
cv2.CHAIN_APPROX_SIMPLE)
cnts = imutils.grab_contours(cnts)
center = None
for cnt in cnts:
c = cv2.contourArea(cnt)
if c < 7000:
continue
x,y,w,h = cv2.boundingRect(cnt)
box = cv2.rectangle(frame,(x,y),(x+w,y+h),(0,255,0),2)
M = cv2.moments(cnt)
center = (int(M["m10"] / M["m00"]), int(M["m01"] / M["m00"]))
pts.append(center)
for i in np.arange(1, len(pts)):
if pts[i -1] is None or pts[i] is None:
continue
cv2.line(frame, pts[i - 1], pts[i], (0, 0, 255), 2)
cv2.imshow('frame',frame)
k = cv2.waitKey(25)
if k == ord('q'):
break
cap.release()