2016-07-04 2 views
1

У меня есть другой вопрос относительно выходной матрицы функции OpenCVs Dense Optical Flow (Farneback). я задал вопрос, похожий на этот недавноПлотная матрица оптического потока OpenCV

(What is output from OpenCV's Dense optical flow (Farneback) function? How can this be used to build an optical flow map in Python?)

И от этого я теперь знаю, что значения, хранящиеся в матрице Х и Y расстояние, что конкретный пиксель перемещается по отношению к предыдущему кадру (Пожалуйста, поправьте меня, если я ошибаюсь).

Я использую видеопоток размером 640x480 пикселей для расчета оптического потока, а форма матрицы расхода показана ниже в печатных результатах, так что я использовал перерыв после прочтения первых 2 кадров, чтобы показать структуры массива.

import cv2 
import numpy as np 

cap = cv2.VideoCapture("T5.avi") 

ret, frame1 = cap.read() 
prvs = cv2.cvtColor(frame1, cv2.COLOR_BGR2GRAY) 

while (1): 
    ret, frame2 = cap.read() 
    next = cv2.cvtColor(frame2, cv2.COLOR_BGR2GRAY) 

    flow = cv2.calcOpticalFlowFarneback(prvs, next, None, 0.5, 3, 15, 2, 5, 1.2, 0) 
    print flow.shape 
    print "Flow : : 0" 
    print flow[:][:][0] 
    print "Flow : : 1" 
    print flow[:][:][1] 
    break 

Это следующий вывод:

(480, 640, 2) 
Flow : : 0 
[[ 0.01214151 0.22083586] 
[ 0.01184586 0.18637304] 
[ 0.01057486 0.15194368] 
..., 
[ 0.00064609 -0.00283471] 
[ 0.00046074 0.0047204 ] 
[ 0.000404 -0.00282944]] 
Flow : : 1 
[[ 0.0152726 0.35010788] 
[ 0.01538487 0.28910625] 
[ 0.01413684 0.22534071] 
..., 
[ 0.00082013 -0.00668656] 
[ 0.00060558 0.00633681] 
[ 0.00056752 -0.00331147]] 

Мне вот интересно, почему сейчас есть 2 значения, хранящиеся в каждом из этих мест? Существуют ли два значения X и Y? Возможно, начальная и конечная позиции? Или компоненты имеют мнимые компоненты?

Я сделал довольно много поиска, но не смог найти ничего, что объясняет это.

ответ

0

Быстрый ответ: Для каждого пикселя, вы получаете значение смещения на обоих X и Y осей.

Я думаю, что вы смешиваете две разные вещи здесь:
Как я упоминал в вашем последнем посте, и, как мы видим здесь, ваши размеры матрицы - (480, 640, 2). Не смешивайте значение X,Y, представляющее конкретное место пикселя в кадре, и значения смещения DeltaX,DeltaY внутри каждого пиксельного места.

Например, flow[20][20][:] представляет пиксель в местоположении 20 x 20, и на самом деле это точка с двумя значениями поплавка в ней - DeltaX,DeltaY, о которых мы говорили раньше.
Так, flow[20][20][0] на самом деле в DeltaX на пикселе 20x20 и flow[20][20][1] является DeltaY в том же пикселе (20x20).

Надеюсь, что это ясно сейчас.

Смежные вопросы