changeset 133:63dd4355b6d1

saving of feature positions in sqlite database
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Wed, 17 Aug 2011 22:26:01 -0400
parents 45c64e68053c
children a617d0808bbc
files c/Feature.cpp c/Makefile c/feature-based-tracking.cpp include/Feature.hpp
diffstat 4 files changed, 31 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/c/Feature.cpp	Wed Aug 17 19:03:25 2011 -0400
+++ b/c/Feature.cpp	Wed Aug 17 22:26:01 2011 -0400
@@ -3,6 +3,8 @@
 #include "opencv2/core/core.hpp"
 #include "opencv2/highgui/highgui.hpp"
 
+#include "src/TrajectoryDBAccessList.h"
+
 using namespace std;
 using namespace cv;
 
@@ -15,6 +17,11 @@
   computeMotionData(frameNum);
 }
 
+void FeatureTrajectory::write(TrajectoryDBAccess<Point2f>& trajectoryDB) const {
+  /// \todo save velocities
+  trajectoryDB.write(positions);
+}
+
 #ifdef USE_OPENCV
 /// \todo add option for anti-aliased drawing, thickness
 void FeatureTrajectory::draw(Mat& img, const Scalar& color) const {
--- a/c/Makefile	Wed Aug 17 19:03:25 2011 -0400
+++ b/c/Makefile	Wed Aug 17 22:26:01 2011 -0400
@@ -1,13 +1,15 @@
 BUILD_DIR=../bin
 SCRIPTS_DIR=../scripts
+TRAJECTORYMANAGEMENT_DIR=$(HOME)/Research/Code/trajectorymanagementandanalysis/trunk/src/TrajectoryManagementAndAnalysis
 
 CXX = g++
 
-INCLUDE = -I../include -I$(HOME)/Research/Code/trajectorymanagementandanalysis/trunk/src/TrajectoryManagementAndAnalysis
+INCLUDE = -I../include -I$(TRAJECTORYMANAGEMENT_DIR)
 
-LIBS = -L../../klt
+LIBS = -L../../klt -L$(TRAJECTORYMANAGEMENT_DIR)
 
 LDFLAGS = -lm
+LDFLAGS += -lTrajectoryManagementAndAnalysis -lsqlite3
 #LDFLAGS += -lboost_program_options-mt -lboost_filesystem-mt -lboost_system-mt -lboost_unit_test_framework-mt
 #LDFLAGS += -lfltk
 
--- a/c/feature-based-tracking.cpp	Wed Aug 17 19:03:25 2011 -0400
+++ b/c/feature-based-tracking.cpp	Wed Aug 17 22:26:01 2011 -0400
@@ -4,6 +4,7 @@
 #include "utils.hpp"
 
 #include "src/Trajectory.h"
+#include "src/TrajectoryDBAccessList.h"
 
 #include "opencv2/core/core.hpp"
 #include "opencv2/highgui/highgui.hpp"
@@ -60,7 +61,7 @@
 
   KLTFeatureTrackingParameters params;
   params.frame1 = 0;
-  params.nFrames = -1;
+  params.nFrames = 50;
   params.maxNFeatures = 1000;
   params.featureQuality = 0.1;
   params.minFeatureDistanceKLT = 3;
@@ -108,6 +109,11 @@
       return 1;
     }
   
+  // database
+  TrajectoryDBAccessList<Point2f> trajectoryDB;
+  trajectoryDB.connect("test.sqlite");
+  trajectoryDB.createTable();
+
   vector<KeyPoint> prevKpts, currKpts;
   vector<Point2f> prevPts, currPts, newPts;
   vector<uchar> status;
@@ -118,7 +124,8 @@
   vector<FeaturePointMatch> featurePointMatches;
     
   // TODO structure de donnee paires pointeur trajectory, numero de keypoint
-  int key = '?'; 
+  int key = '?';
+  unsigned int savedFeatureId=0;
   for (int frameNum = params.frame1; ((params.frame1+frameNum < params.nFrames) || (params.nFrames < 0)) && !::interruptionKey(key); frameNum++) {
       capture >> frame;
       cout << capture.get(CV_CAP_PROP_POS_FRAMES) << " " << prevPts.size() << endl;
@@ -144,7 +151,9 @@
 	    iter->pointNum = trackedPts.size()-1;
 	    iter++;
 	  } else {
-	    // save feature
+	    iter->feature->setId(savedFeatureId);
+	    savedFeatureId++;
+	    iter->feature->write(trajectoryDB);
 	    iter = featurePointMatches.erase(iter);
 	  }
 	}
@@ -185,9 +194,10 @@
       prevPts = currPts;
       //prevKpts = currKpts;
       //currDesc.copyTo(prevDesc);
-      key = waitKey(0);
+      key = waitKey(2);
     }  
   
+  trajectoryDB.disconnect();
   return 0;
 }
 
--- a/include/Feature.hpp	Wed Aug 17 19:03:25 2011 -0400
+++ b/include/Feature.hpp	Wed Aug 17 22:26:01 2011 -0400
@@ -5,6 +5,8 @@
 
 #include <boost/shared_ptr.hpp>
 
+template<typename T> class TrajectoryDBAccess;
+
 /** Class for feature data
     positions, velocities and other statistics to evaluate their quality
     before saving. */
@@ -12,8 +14,12 @@
 public:
   FeatureTrajectory(const int& frameNum, const cv::Point2f& p);
 
+  void setId(const unsigned int& id) { positions.setId(id);velocities.setId(id);}
+
   void addPoint(const int& frameNum, const cv::Point2f& p);
 
+  void write(TrajectoryDBAccess<cv::Point2f>& trajectoryDB) const;
+
 #ifdef USE_OPENCV
   void draw(cv::Mat& img, const cv::Scalar& color) const;
 #endif