Ich versuche, die Ausgabe von Opencvs dichter optischer Flussfunktion zu verwenden, um ein Köcherdiagramm der Bewegungsvektoren zu zeichnen, konnte aber nicht herausfinden, was die Funktion tatsächlich ausgibt. Hier ist der Code:Was wird von der OpenCV-Funktion für dichten optischen Fluss (Farneback) ausgegeben? Wie kann dies verwendet werden, um eine optische Flusskarte in Python zu erstellen?
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 effektiv der gleiche Code wie in den OpenCV-Tutorial auf dichten optischen Fluss gegeben. Ich erhalte 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 würde gerne wissen, was genau diese Werte sind? Original X, Y Koordinaten? Letzte X, Y Koordinaten? Entfernung verschoben?
Ich plane, die Anfangs- und Endkoordinaten, um zu versuchen und finden Sie einen Köcher Stück unter Verwendung von Code aus der folgenden Seite zu machen: https://www.getdatajoy.com/examples/python-plots/vector-fields Dies liegt daran, in Python gibt es keine Funktion ist, dass mir bewusst bin, dass eine optische Strömungs Karte Plots für dich.
Vielen Dank im Voraus!
Okay, super, danke. Die Flussmatrix wäre also eine Matrix, die die gleiche Größe wie das Originalbild hat, und die X- und Y-Werte, die in bestimmten Positionen gespeichert sind, würden die X- und Y-Entfernung sein, um dorthin zu gelangen, wo sie sich gerade befinden. Wenn ich also herausfinden würde, wo sie sich bewegt haben, würde ich einfach ihre aktuelle Pixelposition in der Flussmatrix verwenden und die X- und Y-Abstände, die sie zurückgelegt haben, subtrahieren. –
ja, genau so. –
geben alle optischen Flussalgorithmen Ausgabe in Pixeleinheiten? – asdf