Python OpenCV Отслеживание объектов. Измерьте расстояние между точками от первого кадра (камера или видео) и сохраните его для дальнейшего использования - PullRequest
0 голосов
/ 11 января 2020

У меня есть проект, в котором я должен измерять расстояние между двумя движущимися точками в режиме реального времени и вычислять, сколько каждая точка прошла (в мм или пикселях) от начальной позиции. До сих пор мне удавалось получать каждое значение (координаты x, y) из каждого кадра, но мне нужны координаты точек из первого кадра. Мне нужно рассчитать в режиме реального времени, каково расстояние, пройденное каждой точкой в ​​любое время. Точки будут располагаться более или менее в одном и том же положении в реальном мире, но мне нужно прочитать начальное расстояние между ними, используя OpenCV и python из камеры. Это фрагмент кода, из которого мне удалось взять значение x, y для каждой точки для каждого кадра. Я приложил это изображение со схемой. Мне нужно хранить x, y для обеих точек в FRAME 1, например:

point_1_x_value_Frame_1 = некоторое значение и сохранять или оставаться постоянным

point_1_y_value_Frame_1 = некоторое значение и сохранять или оставаться постоянным

point_2_x_value_Frame_1 = некоторое значение и сохранение или сохранение постоянной

point_2_y_value_Frame_1 = некоторое значение и сохранение или сохранение постоянной

Спасибо

while(cap.isOpened()):
ret, frame = cap.read()

width  = cap.get(cv2.CAP_PROP_FRAME_WIDTH)
height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
fps = cap.get(cv2.CAP_PROP_FPS)
frame_number = cap.get(cv2.CAP_PROP_POS_FRAMES);
frame_count = cap.get(cv2.CAP_PROP_FRAME_COUNT)
gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)

next, status, error = cv.calcOpticalFlowPyrLK(prev_gray, gray, prev, None, **lk_params)       
good_old = prev[status == 1]
good_new = next[status == 1]

for i, (new, old) in enumerate(zip(good_new, good_old)):
    a, b = new.ravel()
    c, d = old.ravel()
    mask = cv.line(mask, (a, b), (c, d), color, 2)
    frame = cv.circle(frame, (a, b), 1, (255, 0, 0), 3)

    if a < width/2:
        PCT_1_xn = a # x coord for point 1
        PCT_1_yn = b # y coord for point 1
    elif a > width/2:
        PCT_2_xn = a # x coord for point 2
        PCT_2_yn = b # y coord for point 2

Схема c представление: enter image description here

...