cv2.Linie und cv2.Kreis return None
Ich versuche zur Implementierung der Lucas-Kanade-Algorithmus für den optischen Fluss auf Python mit cv2.calcOpticalFlowPyrLK. Jedoch, wenn ich versuche, eine Linie zu ziehen, um die Verbindung der aktuellen und der vorherigen Punkte, wie auch die Stelle selbst, die Funktionen geben Keine.
Hier ist der code
#draw the overlaying tracking img
for i,(new,old) in enumerate(zip(good_new,good_old)):
a,b = new.ravel() #tmp new value
c,d = old.ravel() #tmp old value
#draws a line connecting the old point with the new point
mask = cv2.line(mask,(a,b),(c,d),color[i].tolist(),2) #returns None... why??
#draws the new point
frame = cv2.circle(frame,(a,b),5,color[i].tolist(),-1) #returns None... why??
img = cv2.add(frame,mask)
#show on window
cv2.imshow("frame",img)
a,b,c,d sind numpy.float32
Rahmen meiner gelesenen Wert aus der webcam
Maske ist init in ein array von Nullen
Farbe ist ein random array
Dies ist die Fehlermeldung die ich bekomme, wenn ich versuche, imshow
error: /Users/vagrant/pisi-64bit/tmp/opencv-2.4.5-2/work/opencv-2.4.5/modules/core/src/array.cpp:2482: error: (-206) Unrecognized or unsupported array type in function cvGetMat
Ich bin wirklich dankbar für die Hilfe!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Entsprechend der OpenCV-docs, cv2.Zeile() und cv2.Kreis() immer wieder Keine. http://docs.opencv.org/modules/core/doc/drawing_functions.html
Diese Methoden sind Methoden, so verändern Sie das erste argument, das Sie übergeben werden. Siehe diesen Stack Overflow Frage, die beschreibt, diese Arten von Funktionen: Wie sind Python-in-place-operator-Funktionen anders als die standard-operator-Funktionen?
Ihre festen code sollte wie folgt Aussehen: