diff c/feature-based-tracking.cpp @ 138:c1b260b48d2a

corrected initialization bugs and feature shortening before saving
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Fri, 19 Aug 2011 12:15:23 -0400
parents 445e773c9be3
children 47329bd16cc0
line wrap: on
line diff
--- a/c/feature-based-tracking.cpp	Fri Aug 19 01:35:45 2011 -0400
+++ b/c/feature-based-tracking.cpp	Fri Aug 19 12:15:23 2011 -0400
@@ -110,17 +110,27 @@
   //   }
 
   capture.open(params.videoFilename);
-  if (!capture.isOpened())
-    {
-      //help(argv);
-      cout << "capture device " << argv[1] << " failed to open!" << endl;
-      return 1;
-    }
+  if(capture.isOpened()) {
+    videoSize = Size(capture.get(CV_CAP_PROP_FRAME_WIDTH), capture.get(CV_CAP_PROP_FRAME_HEIGHT));
+    cout << "Video " << argv[1] <<
+      ": width=" << videoSize.width <<
+      ", height=" << videoSize.height <<
+      ", nframes=" << capture.get(CV_CAP_PROP_FRAME_COUNT) << endl;
+  } else {
+    cout << "Video filename " << params.videoFilename << " could not be opened. Exiting." << endl;
+    exit(0);
+  }
+  // if (!capture.isOpened())
+  //   {
+  //     //help(argv);
+  //     cout << "capture device " << argv[1] << " failed to open!" << endl;
+  //     return 1;
+  //   }
   
   // database
   TrajectoryDBAccess<Point2f>* trajectoryDB = new TrajectoryDBAccessList<Point2f>();
   //TrajectoryDBAccess<Point2f>* trajectoryDB = new TrajectoryDBAccessBlob<Point2f>();
-  trajectoryDB->connect("test.sqlite");
+  trajectoryDB->connect(params.databaseFilename.c_str());
   trajectoryDB->createTable();
 
   vector<KeyPoint> prevKpts, currKpts;
@@ -158,10 +168,11 @@
 	  
 	  if (status[iter->pointNum]) {
 	    iter->feature->addPoint(frameNum, currPts[iter->pointNum]);
-	    trackedPts.push_back(currPts[iter->pointNum]);
-	    iter->pointNum = trackedPts.size()-1;
 
-	    deleteFeature |= !iter->feature->largeDisplacement(params.nDisplacements, minTotalFeatureDisplacement);
+	    bool smallDisplacement = iter->feature->smallDisplacement(params.nDisplacements, minTotalFeatureDisplacement);
+	    if (smallDisplacement)
+	      iter->feature->shorten();
+	    deleteFeature |= smallDisplacement;
 	    // motionSmooth()
 	  } 
 
@@ -172,8 +183,11 @@
 	      iter->feature->write(*trajectoryDB);
 	    }
 	    iter = featurePointMatches.erase(iter);
-	  } else
+	  } else {
+	    trackedPts.push_back(currPts[iter->pointNum]);
+	    iter->pointNum = trackedPts.size()-1;
 	    iter++;
+	  }
 	}
 	currPts = trackedPts;
 	assert(currPts.size() == featurePointMatches.size());