Was wird von der OpenCV-Funktion für dichten optischen Fluss (Farneback) ausgegeben? Wie kann damit eine optische Flusskarte in Python erstellt werden?

Ich versuche, die Ausgabe der Opencv-Funktion für dichten optischen Fluss zu verwenden, um ein Köcherdiagramm der Bewegungsvektoren zu zeichnen, konnte jedoch nicht herausfinden, was die Funktion tatsächlich ausgibt. Hier ist der Code:

import cv2
import numpy as np

cap = cv2.VideoCapture('GOPR1745.avi')

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

hsv[...,1] = 255
count=0

while(1):
    ret, frame2 = cap.read()
    next = cv2.cvtColor(frame2,cv2.COLOR_BGR2GRAY)
    flow = cv2.calcOpticalFlowFarneback(prvs,next,None, 0.5, 3, 15, 3, 10, 1.2, 0)
    mag, ang = cv2.cartToPolar(flow[...,0], flow[...,1])

    hsv[...,0] = ang*180/np.pi/2
    hsv[...,2] = cv2.normalize(mag,None,0,255,cv2.NORM_MINMAX)
    rgb = cv2.cvtColor(hsv,cv2.COLOR_HSV2BGR)
    if count==10:
        count=0

        print "flow",flow

    cv2.imshow('frame2',rgb)
    count=count+1
    k = cv2.waitKey(30) & 0xff
    if k == 27:
        break
    elif k == ord('s'):
    prvs = next

cap.release()
cv2.destroyAllWindows()

Dies ist praktisch derselbe Code wie im OpenCv-Lernprogramm zum dichten optischen Fluss. Ich erhalte die folgende Ausgabe von der Druckfunktion:

flow [[[  0.00000000e+00   0.00000000e+00]
  [  0.00000000e+00   0.00000000e+00]
  [  0.00000000e+00   0.00000000e+00]
  ..., 
  [  0.00000000e+00   0.00000000e+00]
  [  0.00000000e+00   0.00000000e+00]
  [  0.00000000e+00   0.00000000e+00]]

 ..., 
 [[ -3.54891084e-14  -1.38642463e-14]
  [ -2.58058853e-14  -1.54020863e-14]
  [ -5.56561768e-14  -1.88019359e-14]
  ..., 
  [ -7.59403916e-15   1.16633225e-13]
  [  7.22156371e-14  -1.61951507e-13]
  [ -4.30715618e-15  -4.39530987e-14]]

 [[ -3.54891084e-14  -1.38642463e-14]
  [ -2.58058853e-14  -1.54020863e-14]
  [ -5.56561768e-14  -1.88019359e-14]
  ..., 
  [ -7.59403916e-15   1.16633225e-13]
  [  7.22156371e-14  -1.61951507e-13]
  [ -4.30715618e-15  -4.39530987e-14]]

Ich möchte wissen, was genau diese Werte sind? Ursprüngliche X, Y-Koordinaten? Endgültige X, Y-Koordinaten? Zurückgelegte Strecke?

Ich plane, die Anfangs- und Endkoordinaten zu finden, um mithilfe des Codes auf der folgenden Seite einen Köcherplot zu erstellen:https: //www.getdatajoy.com/examples/python-plots/vector-field Das liegt daran, dass es in Python keine mir bekannte Funktion gibt, die eine optische Flusskarte für Sie zeichnet.

Danke im Voraus

Antworten auf die Frage(2)

Ihre Antwort auf die Frage