title: How to quantify difference between frames using optical flow estimation?
body: <p>Here is a code to get the optical flow output from a stabilized video (no camera movement) and save it as a set of frames</p>
  
  <pre><code>import cv2 as cv
  import numpy as np
  
  # The video feed is read in as a VideoCapture object
  cap = cv.VideoCapture("2_stable_video.avi")
  
  # ret = a boolean return value from getting the frame, first_frame = the first frame in the entire video sequence
  ret, first_frame = cap.read()
  
  # Converts frame to grayscale because we only need the luminance channel for detecting edges - less computationally expensive
  
  prev_gray = cv.cvtColor(first_frame, cv.COLOR_BGR2GRAY)
  
  # Creates an image filled with zero intensities with the same dimensions as the frame
  mask = np.zeros_like(first_frame)
  
  # Sets image saturation to maximum
  mask[..., 1] = 255
  
  count = 0
  while(cap.isOpened()):
      # ret = a boolean return value from getting the frame, frame = the current frame being projected in the video
      ret, frame = cap.read()
  
      # Opens a new window and displays the input frame
      cv.imshow("input", frame)
  
      # Converts each frame to grayscale - we previously only converted the first frame to grayscale
      gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
      # Calculates dense optical flow by Farneback method
      flow = cv.calcOpticalFlowFarneback(prev_gray, gray, None, 0.5, 3, 15, 3, 5, 1.2, 0)
  
      # Computes the magnitude and angle of the 2D vectors
      magnitude, angle = cv.cartToPolar(flow[..., 0], flow[..., 1])
  
      # Sets image hue according to the optical flow direction
      mask[..., 0] = angle * 180 / np.pi / 2
  
      # Sets image value according to the optical flow magnitude (normalized)
      mask[..., 2] = cv.normalize(magnitude, None, 0, 255, cv.NORM_MINMAX)
  
      # Converts HSV to RGB (BGR) color representation
      rgb = cv.cvtColor(mask, cv.COLOR_HSV2BGR)
  
      # Opens a new window and displays the output frame
      cv.imshow("dense optical flow", rgb[40:150,120:220])
      cv.imwrite("frames_modified_2/%d.png" % count, rgb[40:150,120:220])
      count +=1
  
      # Updates previous frame
      prev_gray = gray
  
      # Frames are read by intervals of 1 millisecond. The programs breaks out of the while loop when the user presses the 'q' key
      if cv.waitKey(1) &amp; 0xFF == ord('q'):
          break
  
  cap.release()
  cv.destroyAllWindows()
  </code></pre>
  
  <p>Can someone please suggest how to quantify the difference between the frames? i.e. to estimate speed/velocity ?</p>