@ -17,12 +17,12 @@ feature_params = dict( maxCorners = 100,
blockSize = 7 )
# Parameters for lucas kanade optical flow
lk_params = dict ( winSize = ( 15 , 15 ) ,
lk_params = dict ( winSize = ( 15 , 15 ) ,
maxLevel = 2 ,
criteria = ( cv . TERM_CRITERIA_EPS | cv . TERM_CRITERIA_COUNT , 10 , 0.03 ) )
# Create some random colors
color = np . random . randint ( 0 , 255 , ( 100 , 3 ) )
color = np . random . randint ( 0 , 255 , ( 100 , 3 ) )
# Take first frame and find corners in it
ret , old_frame = cap . read ( )
@ -33,7 +33,11 @@ p0 = cv.goodFeaturesToTrack(old_gray, mask = None, **feature_params)
mask = np . zeros_like ( old_frame )
while ( 1 ) :
ret , frame = cap . read ( )
ret , frame = cap . read ( )
if not ret :
print ( ' No frames grabbed! ' )
break
frame_gray = cv . cvtColor ( frame , cv . COLOR_BGR2GRAY )
# calculate optical flow
@ -45,18 +49,20 @@ while(1):
good_old = p0 [ st == 1 ]
# draw the tracks
for i , ( new , old ) in enumerate ( zip ( good_new , good_old ) ) :
a , b = new . ravel ( )
c , d = old . ravel ( )
mask = cv . line ( mask , ( int ( a ) , int ( b ) ) , ( int ( c ) , int ( d ) ) , color [ i ] . tolist ( ) , 2 )
frame = cv . circle ( frame , ( int ( a ) , int ( b ) ) , 5 , color [ i ] . tolist ( ) , - 1 )
img = cv . add ( frame , mask )
cv . imshow ( ' frame ' , img )
for i , ( new , old ) in enumerate ( zip ( good_new , good_old ) ) :
a , b = new . ravel ( )
c , d = old . ravel ( )
mask = cv . line ( mask , ( int ( a ) , int ( b ) ) , ( int ( c ) , int ( d ) ) , color [ i ] . tolist ( ) , 2 )
frame = cv . circle ( frame , ( int ( a ) , int ( b ) ) , 5 , color [ i ] . tolist ( ) , - 1 )
img = cv . add ( frame , mask )
cv . imshow ( ' frame ' , img )
k = cv . waitKey ( 30 ) & 0xff
if k == 27 :
break
# Now update the previous frame and previous points
old_gray = frame_gray . copy ( )
p0 = good_new . reshape ( - 1 , 1 , 2 )
p0 = good_new . reshape ( - 1 , 1 , 2 )
cv . destroyAllWindows ( )