title: calcOpticalFlowPyrLK losing single tracking point
body: <p>I am trying to write a python program to track a user's head movement based on a single point between their eyes. I am using OpenCV 2.4.5 and calcOpticalFlowPyrLK. I set the initial point using HAAR points, and the initial point is correct, but after the first call to calcOpticalFlowPyrLK the program is now tracking a completely different point. I'm not very familiar with computer vision, so I can't figure out why its losing the initial point. </p>
  
  <p>I'm using python 2.7, Fedora 18, and OpenCV 2.4.5. </p>
  
  <p>My code:</p>
  
  <pre><code>import numpy as np
  import cv2
  
  cap = cv2.VideoCapture(0)
  
  # loading the classifiers
  hcf = cv2.CascadeClassifier('/usr/share/OpenCV/haarcascades/haarcascade_frontalface_default.xml')
  hce = cv2.CascadeClassifier('/usr/share/OpenCV/haarcascades/haarcascade_eye.xml')
  
  # params for ShiTomasi corner detection
  feature_params = dict( maxCorners = 100,
                         qualityLevel = 0.3,
                         minDistance = 7,
                         blockSize = 7 )
  
  # Parameters for lucas kanade optical flow
  lk_params = dict( winSize  = (15,15),
                    maxLevel = 2,
                    criteria = (cv2.TERM_CRITERIA_EPS | cv2.TERM_CRITERIA_COUNT, 10, 0.03))
  
  # Create some random colors
  color = np.random.randint(0,255,(100,3))
  
  # Take first frame and find corners in it
  ret, old_frame = cap.read()
  old_gray = cv2.cvtColor(old_frame, cv2.COLOR_BGR2GRAY)
  
  # Create a mask image for drawing purposes
  mask = np.zeros_like(old_frame)
  
  first = True
  while(1):
      #Get new frame
      ret,frame = cap.read()
      frame_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
  
      #First iteration, calcualte the face
      if(first):
          first = False
          faces = hcf.detectMultiScale(frame_gray, minSize=(100, 100))
          face = faces[0]
          print face[0],face[1],face[2],face[3]
  
          p0 = [[((face[0] + (face[2]/2)),(face[1] + (face[3]/3)))]]
          p0 = np.float32(np.asarray(p0))
          print "p0", p0
  
      #cv2.rectangle(frame,(face[0], face[1]), (face[0] + face[2], face[1] + face[3]),(155, 255, 25),2)
      #Draw circle at initial point
      cv2.circle(frame,((face[0] + (face[2]/2)),(face[1] + (face[3]/3))),5,(155, 255, 25))
  
      # calculate optical flow
      p1, st, err = cv2.calcOpticalFlowPyrLK(old_gray, frame_gray, p0, None, **lk_params)
  
      # Select good points
      if st==1:
          good_new = p1[st==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 = cv2.line(mask, (a,b),(c,d), color[i].tolist(), 2)
              cv2.circle(frame,(a,b),5,color[i].tolist(),-1)
  
      cv2.imshow('frame',frame)
      k = cv2.waitKey(30) &amp; 0xff
      if k == 27:
          break
  
      # Now update the previous frame and previous points
      old_gray = frame_gray.copy()
      if st==1:
          p0 = good_new.reshape(-1,1,2)
  
  cv2.destroyAllWindows()
  cap.release()
  </code></pre>