# HG changeset patch # User Nicolas Saunier # Date 1314140681 14400 # Node ID 8de5e8256224359ad2245c1b75cfe4f27ad3774e # Parent 47329bd16cc080f27360ef3e3e1f0c3c01512e03 added function to save vectors of features diff -r 47329bd16cc0 -r 8de5e8256224 c/feature-based-tracking.cpp --- a/c/feature-based-tracking.cpp Tue Aug 23 13:14:47 2011 -0400 +++ b/c/feature-based-tracking.cpp Tue Aug 23 19:04:41 2011 -0400 @@ -52,6 +52,13 @@ feature(_feature), pointNum(_pointNum) {} }; +inline void saveFeatures(vector& features, TrajectoryDBAccess& db, const unsigned int& minNFeatures = 0) { + if (features.size() >= minNFeatures) { + BOOST_FOREACH(FeatureTrajectoryPtr f, features) f->write(db); + features.clear(); + } +} + int main(int argc, char *argv[]) { // BriefDescriptorExtractor brief(32); // const int DESIRED_FTRS = 500; @@ -110,7 +117,7 @@ // } // database - TrajectoryDBAccess* trajectoryDB = new TrajectoryDBAccessList(); + boost::shared_ptr > trajectoryDB = boost::shared_ptr >(new TrajectoryDBAccessList()); //TrajectoryDBAccess* trajectoryDB = new TrajectoryDBAccessBlob(); trajectoryDB->connect(params.databaseFilename.c_str()); trajectoryDB->createTable(); @@ -121,7 +128,7 @@ vector errors; Mat prevDesc, currDesc; - vector features; + vector lostFeatures; vector featurePointMatches; int key = '?'; @@ -162,7 +169,8 @@ iter->feature->setId(savedFeatureId); savedFeatureId++; /// \todo smoothing - iter->feature->write(*trajectoryDB); + //iter->feature->write(*trajectoryDB); + lostFeatures.push_back(iter->feature); } iter = featurePointMatches.erase(iter); } else { @@ -173,6 +181,7 @@ } currPts = trackedPts; assert(currPts.size() == featurePointMatches.size()); + saveFeatures(lostFeatures, *trajectoryDB); if (params.display) { BOOST_FOREACH(FeaturePointMatch fp, featurePointMatches) @@ -195,7 +204,6 @@ goodFeaturesToTrack(currentFrameBW, newPts, params.maxNFeatures, params.featureQuality, params.minFeatureDistanceKLT, featureMask, params.windowSize, params.useHarrisDetector, params.k); BOOST_FOREACH(Point2f p, newPts) { //for (unsigned int i=0; i