Как мы можем нарисовать траекторию на центроид каждого объекта в кадре отдельно, используя Python? - PullRequest
0 голосов
/ 29 мая 2019

Сначала я создаю список для добавления центроидов, затем в цикле 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()
...