У меня есть другой вопрос относительно выходной матрицы функции OpenCVs Dense Optical Flow (Farneback). я задал вопрос, похожий на этот недавноПлотная матрица оптического потока OpenCV
И от этого я теперь знаю, что значения, хранящиеся в матрице Х и 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? Возможно, начальная и конечная позиции? Или компоненты имеют мнимые компоненты?
Я сделал довольно много поиска, но не смог найти ничего, что объясняет это.