Как рассчитать ограничивающие рамки / координаты, используя величину и угол выхода плотного оптического потока - PullRequest
0 голосов
/ 21 октября 2019

Я использую плотный код оптического потока для отслеживания объекта в видео. Это в основном дает маску объекта пиксель за пикселем. То, что я хочу найти, это ограничивающий прямоугольник или координаты объекта с использованием величины и угла. Я знаю, что есть формула для вычисления координат по амплитуде, т.е. Величина * Косинус (Угол), но не совсем уверен, как использовать это в коде, поскольку выходные данные величины и угла находятся в матричной форме.

import cv2 as cv
import numpy as np
%matplotlib inline
from matplotlib import pyplot as plt

cap = cv.VideoCapture("C:/Users/Akash Jain/Downloads/yolo-object-detection/videos/overpass.mp4")
ret, first_frame = cap.read()
prev_gray = cv.cvtColor(first_frame, cv.COLOR_BGR2GRAY)
mask = np.zeros_like(first_frame)
mask[..., 1] = 255
while(cap.isOpened()):
    ret, frame = cap.read()
    gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
    flow = cv.calcOpticalFlowFarneback(prev_gray, gray, None, 0.5, 3, 15, 3, 5, 1.2, 0)
    magnitude, angle = cv.cartToPolar(flow[..., 0], flow[..., 1])
    mask[..., 0] = angle * 180 / np.pi / 2
    mask[..., 2] = cv.normalize(magnitude, None, 0, 255, cv.NORM_MINMAX)
    rgb = cv.cvtColor(mask, cv.COLOR_HSV2BGR)
    figure = plt.figure(figsize=(15,15))
    plt.imshow(frame)    
    plt.show()
    figure = plt.figure(figsize=(15,15))
    plt.imshow(rgb)    
    plt.show()
    prev_gray = gray
    if cv.waitKey(1) & 0xFF == ord('q'):
        break
cap.release()
cv.destroyAllWindows()

Нужна ваша помощь, чтобы вычислить ограничивающую рамку объекта или найти координаты.

Ниже приведен вывод, который я получаю для каждого кадра.

Ввод: enter image description here

Выход:

enter image description here

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