У меня есть несколько видео, где круги движутся рядами снизу вверх. На данный момент мне удается подсчитать круги в самом верхнем ряду в каждом кадре. Но поскольку каждое видео имеет разную скорость строк, некоторые круги сканируются 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 Я сохраняю только один круг, а не все круги в кадре?