как определить центроид и измерить расстояние между двумя объектами ?? используете birdeyeview?

#python #tensorflow #opencv #computer-vision #artificial-intelligence

Вопрос:

я хочу обнаружить движущегося человека и его центроид (без использования центроидтрекера) ,у меня есть видео идущих людей,

это мой код

 import cv2

face_cascade=cv2.CascadeClassifier('haarcascade_fullbody.xml')
frame=cv2.imread('person.png')

gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, 1.1, 4)

for (x, y, w, h) in faces:
    cv2.rectangle(frame, (x, y), (x   w, y   h), (255, 0, 0), 3)

    cX = int((x  w) / 2.0)
    cY = int((y   h) / 2.0)

   print(cX)
   print(cY)
   cv2.circle(frame, (cX, cY), 10, (205, 0, 255), -1)
   cv2.imshow('img',frame)
   if cv2.waitKey(1) amp; 0xFF == ord('q'):
    break
cv2.waitKey()
cv2.destroyAllWindows()
 

я получаю этот вывод ,пожалуйста, скажите мне, что не так в моем коде

Комментарии:

1. Это не вид с высоты птичьего полета. Почему ваши ограничительные рамки не плотно прилегают к фигуре? Для этого, если вы хотите измерить расстояние, я бы предположил, что нижняя часть ограничивающего прямоугольника находится на уровне земли. В противном случае с центроидом вам придется предположить, что люди одинаковой высоты, и знать вертикальную высоту в мировой координате для измерения 3D-расстояния. Использование нижнего означает, что вертикальный размер равен нулю.

2. да ,это не так, но я планирую решить эту проблему с помощью birdeyeviw

Ответ №1:

Это код, в котором вы можете обнаружить человека и найти его центроид расстояние.

 import cv2
import math


face_cascade=cv2.CascadeClassifier('haarcascade_fullbody.xml')
frame=cv2.imread('dis456.png')

gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, 1.1, 4)
print(faces)


p1 = 361  # image pont
p2 = 237
cv2.circle(frame, (p1, p2), 5, ((139,0,0)), -1)
for face in faces:
   (x, y, w, h) = face
   (x1, y1, w1, h1) = faces[0]


   cx1, cy1 = int(x   w / 2), int(y   h / 2)
   cx2, cy2 = int(x1   w1 / 2), int(y1   h1 / 2)

   cv2.circle(frame, (cx1, cy1), 2, (0, 245, 30), -1)
   cv2.circle(frame, (cx2, cy2), 2, (0, 245, 30), -1)

  # dist=math.sqrt(((cx1-cx2)**2) (cy2-cy1)**2))
   cv2.rectangle(frame, (x, y), (x   w, y   h), (255, 0, 0), 3)

   dis = (math.sqrt(((cx2 - cx1) ** 2)   ((cy2 - cy1) ** 2)) ** 0.5)
   dis = int(dis)
   print("distance is ",dis)
   cv2.line(frame, (cx1, cy1), (p1,p2 ), (0, 234, 76), 2)

  (x,y,w,h)=face
  cv2.putText(frame, 'distance={}'.format(dis), (x, y), cv2.FONT_HERSHEY_COMPLEX, 0.6, 
 (139, 0, 0))




cv2.imshow('img',frame)
cv2.waitKey(0)
cv2.destroyAllWindows()
 

введите описание изображения здесь

Комментарии:

1. я загружаю весь код в свою учетную запись github для предварительной трансформации birdseye view.