#python #variables #computer-vision
#python #переменные #компьютерное зрение
Вопрос:
я хочу создать функцию, которая помогает вычислять скорость обнаруженного и отслеживаемого объекта, идея состоит в том, чтобы вычислить расстояние между двумя точками p1 и p2 проблема в том, что p2 сохраняет предыдущее местоположение объекта, а p1 — фактическое местоположение объекта. как я могу ввести p2 в функцию, не инициализируясь каждый раз. я попытался объявить ее как глобальную переменную вне функции, но она не работает » ошибка: p2 не определен »
def draw_box_label(img, bbox_cv2, box_color=(0, 255, 255), show_label=True):
'''
Helper funciton for drawing the bounding boxes and the labels
bbox_cv2 = [left, top, right, bottom]
'''
##sagem begin
global p1
p1=[]
##sagem end
#box_color= (0, 255, 255)
font = cv2.FONT_HERSHEY_SIMPLEX
font_size = 0.7
font_color = (0, 0, 0)
left, top, right, bottom = bbox_cv2[1], bbox_cv2[0], bbox_cv2[3], bbox_cv2[2]
#sagem begin
p1.append((left right)/2)
p1.append((top bottom)/2)
#sagem end
# Draw the bounding box
cv2.rectangle(img, (left,top), (right, bottom), box_color, 4)
if show_label:
# Draw a filled box on top of the bounding box (as the background for the labels)
cv2.rectangle(img, (left-2, top-45), (right 2, top), box_color, -1, 1)
# speed
if p2!=[]:
surface=calculate_surface(img, bbox_cv2)
scale=calculate_scale(surface)
#Calculate the speed in pixels
speed=round(calculate_speed(p1,p2,scale))
#output the speed
text_s=str(speed) "km/h"
cv2.putText(img,text_s,(left,top-10), font, font_size, font_color, 1, cv2.LINE_AA)
# Output the labels that show the x and y coordinates of the bounding box center.
#text_x= 'x=' str((left right)/2)
#cv2.putText(img,text_x,(left,top-25), font, font_size, font_color, 1, cv2.LINE_AA)
#text_y= 'y=' str((top bottom)/2)
#cv2.putText(img,text_y,(left,top-5), font, font_size, font_color, 1, cv2.LINE_AA)
##sagem begin
p2=p1
##sagem end
return img
Комментарии:
1. пожалуйста, используйте код (текст) вместо картинок. также максимально уменьшите проблему.
2. если у этого p2 есть значение know, вы можете передать его в качестве своего аргумента
3. также спросите себя, какое значение должен иметь этот p2 в самый первый раз, если то, что он представляет, является предыдущим известным местоположением
4. значение p2 должно быть предыдущим значением p1, если я объявляю внутри функции, p2 будет повторно инициализирован при выполнении функции, и если я объявлю его вне функции, оно будет неизвестно, и у меня будет ошибка