Учитывайте один и тот же движущийся объект / круг только один раз в видео - PullRequest
0 голосов
/ 05 мая 2020

У меня есть несколько видео, где круги движутся рядами снизу вверх. На данный момент мне удается подсчитать круги в самом верхнем ряду в каждом кадре. Но поскольку каждое видео имеет разную скорость строк, некоторые круги сканируются 2-3 раза, прежде чем они исчезнут из видео.

#draw circle on blur-window if circle is in upper row
        for i in all_circles_blured[0, :]:
            if i[1] in range(y_posrange1, y_posrange2) and i[0] in range(x_posrange1, x_posrange2):
                #print(i, TabNumber)
                TabNumber += 1
                cv2.circle(blur, (i[0], i[1]), i[2], (0, 255, 0), 5)  # draw the outer circle
                cv2.circle(blur, (i[0], i[1]), 2, (0, 155, 0), 2)  # draw the center of the circle
                cv2.putText(blur, str(TabNumber), (i[0] - 10, i[1]), cv2.FONT_HERSHEY_SIMPLEX, 0.4, (255, 0, 0), 1)

Я попытался сохранить координаты x и y и сравнить их с кругами из предыдущего кадра, но это не работает должным образом.

# draw circle on blur-window if circle is in upper row
        for i in all_circles_blured[0, :]:
            if i[1] in range(y_posrange1, y_posrange2) and i[0] in range(x_posrange1, x_posrange2):
                #compare to previous circles and look for maxdistance 5
                if i[1] in range(i0_prior_frame, i0_prior_frame+5) and i[1] in range(i1_prior_frame, i1_prior_frame+5 ):
                    print("same circle detected")
                else:
                    TabNumber += 1
                    cv2.circle(blur, (i[0], i[1]), i[2], (0, 255, 0), 5)  # draw the outer circle
                    cv2.circle(blur, (i[0], i[1]), 2, (0, 155, 0), 2)  # draw the center of the circle
                    cv2.putText(blur, str(TabNumber), (i[0] - 10, i[1]), cv2.FONT_HERSHEY_SIMPLEX, 0.4, (255, 0, 0), 1)
                i0_prior_frame = i[0]
                i1_prior_frame = i[1]

Думаю, проблема в том, что с i0_priorframe Я сохраняю только один круг, а не все круги в кадре?

1 Ответ

0 голосов
/ 05 мая 2020

PyImageSearch - мой любимый ресурс для такого рода вещей https://www.pyimagesearch.com/.

Это руководство может быть особенно полезным: https://www.pyimagesearch.com/2018/07/23/simple-object-tracking-with-opencv/

Постоянное отслеживание всех кругов будет сложно и непросто.

Я начал писать библиотеку отслеживания объектов: https://github.com/bherbruck/simple-tracker Она отслеживает объекты, отдавая все это обнаруженных объектов в кадре и определяет, является ли объект тем же самым, если движение находится в пределах порогового значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...