Используйте FFmpeg для расчета величины оптического потока - PullRequest
0 голосов
/ 02 апреля 2020

Я пытаюсь использовать FFmpeg для вычисления общего значения оптического потока (или значения движения) в коротком видео. Есть команда, чтобы сделать это? Был бы открыт для любого альтернативного подхода, если бы он был быстрее.

В настоящее время я использую Python и openCV, чтобы сделать это:

def getOpticalMag(prev_image, curr_image):

    prev_image_gray = cv2.cvtColor(prev_image, cv2.COLOR_BGR2GRAY)
    curr_image_gray = cv2.cvtColor(curr_image, cv2.COLOR_BGR2GRAY)

    flow = cv2.calcOpticalFlowFarneback(prev_image_gray, curr_image_gray, flow=None,
                                        pyr_scale=0.5, levels=1, winsize=15,
                                        iterations=2,
                                        poly_n=5, poly_sigma=1.1, flags=0)
    mag, ang = cv2.cartToPolar(flow[...,0], flow[...,1])

    return np.mean(mag)

1 Ответ

1 голос
/ 02 мая 2020

То, что вы ищете, это извлечь вектор движения непосредственно из закодированного видеопотока. FFmpeg не предоставляет интерфейс для этого. Это git https://github.com/jishnujayakumar/MV-Tractus может быть интересно.

С другой стороны, так как вы ищете среднее движение. Вы можете изменить размер (уменьшить в 2 или 4 раза) входных изображений и / или использовать более быстрый метод, такой как DIS flow. Другой стратегией оптимизации было бы вычисление векторов движения для очень разреженной сетки с использованием пирамидального метода Лукаса Канаде.

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