title: Background subtraction and Optical flow for tracking object in OpenCV C++
body: <p>I am working on a project to detect object of interest using background subtraction and track them using optical flow in OpenCV C++. I was able to detect the object of interest using background subtraction. I was able to implement OpenCV Lucas Kanade optical flow on separate program. But, I am stuck at how to these two program in a single program. <code>frame1</code> holds the actual frame from the video, <code>contours2</code>are the selected contours from the foreground object. </p>
  
  <p>To summarize, how do I feed the forground object obtained from Background subtraction method to the <code>calcOpticalFlowPyrLK</code>? Or, help me if my approach is wrong. Thank you in advance.</p>
  
  <pre><code>Mat mask = Mat::zeros(fore.rows, fore.cols, CV_8UC1);
      drawContours(mask, contours2, -1, Scalar(255), 4, CV_FILLED);
  
      if (first_frame)
      {
          goodFeaturesToTrack(mask, features_next, 1000, 0.01, 10, noArray(), 3, false, 0.04);
          fm0 = mask.clone();
          features_prev = features_next;
          first_frame = false;
      }
      else
      {           
          features_next.clear();
          if (!features_prev.empty())
          {
              calcOpticalFlowPyrLK(fm0, mask, features_prev, features_next, featuresFound, err, winSize, 3, termcrit, 0, 0.001);
              for (int i = 0; i &lt; features_prev.size(); i++)
                  line(frame1, features_prev[i], features_next[i], CV_RGB(0, 0, 255), 1, 8);
              imshow("final optical", frame1);
              waitKey(1);
          }
          goodFeaturesToTrack(mask, features_next, 1000, 0.01, 10, noArray(), 3, false, 0.04);
          features_prev = features_next;
          fm0 = mask.clone();         
      }
  </code></pre>