Ask Your Question

Revision history [back]

Dense Optical Flow(Farneback) Output

I have another question regarding the output matrix of OpenCVs Dense optical Flow function (Farneback). I have asked a question similar to this recently

(http://stackoverflow.com/questions/38131822/what-is-output-from-opencvs-dense-optical-flow-farneback-function-how-can-th)

And from that i now know that the values stored in the matrix are the X and Y distances that that specific pixel moved relative to the previous frame.(Please correct me if i'm wrong).

I am using a 640x480 pixel video feed to calculate the optical flow on, and the shape of the flow matrix is shown in the printed results below, npte that i used a break after reading the first 2 frames just to show the structure of the array.

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

This has the following output:

(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]]

I am now wondering now is why there are 2 values stored in each of those places? Are there two X and Y values being stored? Possibly initial and final positions? Or do the components have imaginary components?

I've done quite alot of searching but haven't been able to find anything that explains this.