comparison c/feature-based-tracking.cpp @ 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
comparison
equal deleted inserted replaced
132:45c64e68053c 133:63dd4355b6d1
2 #include "Parameters.hpp" 2 #include "Parameters.hpp"
3 #include "cvutils.hpp" 3 #include "cvutils.hpp"
4 #include "utils.hpp" 4 #include "utils.hpp"
5 5
6 #include "src/Trajectory.h" 6 #include "src/Trajectory.h"
7 #include "src/TrajectoryDBAccessList.h"
7 8
8 #include "opencv2/core/core.hpp" 9 #include "opencv2/core/core.hpp"
9 #include "opencv2/highgui/highgui.hpp" 10 #include "opencv2/highgui/highgui.hpp"
10 //#include "opencv2/imgproc/imgproc.hpp" 11 //#include "opencv2/imgproc/imgproc.hpp"
11 #include "opencv2/features2d/features2d.hpp" 12 #include "opencv2/features2d/features2d.hpp"
58 VideoCapture capture; 59 VideoCapture capture;
59 Mat frame, currentFrameBW, previousFrameBW; 60 Mat frame, currentFrameBW, previousFrameBW;
60 61
61 KLTFeatureTrackingParameters params; 62 KLTFeatureTrackingParameters params;
62 params.frame1 = 0; 63 params.frame1 = 0;
63 params.nFrames = -1; 64 params.nFrames = 50;
64 params.maxNFeatures = 1000; 65 params.maxNFeatures = 1000;
65 params.featureQuality = 0.1; 66 params.featureQuality = 0.1;
66 params.minFeatureDistanceKLT = 3; 67 params.minFeatureDistanceKLT = 3;
67 params.windowSize = 3; 68 params.windowSize = 3;
68 params.useHarrisDetector = false; 69 params.useHarrisDetector = false;
106 //help(argv); 107 //help(argv);
107 cout << "capture device " << argv[1] << " failed to open!" << endl; 108 cout << "capture device " << argv[1] << " failed to open!" << endl;
108 return 1; 109 return 1;
109 } 110 }
110 111
112 // database
113 TrajectoryDBAccessList<Point2f> trajectoryDB;
114 trajectoryDB.connect("test.sqlite");
115 trajectoryDB.createTable();
116
111 vector<KeyPoint> prevKpts, currKpts; 117 vector<KeyPoint> prevKpts, currKpts;
112 vector<Point2f> prevPts, currPts, newPts; 118 vector<Point2f> prevPts, currPts, newPts;
113 vector<uchar> status; 119 vector<uchar> status;
114 vector<float> errors; 120 vector<float> errors;
115 Mat prevDesc, currDesc; 121 Mat prevDesc, currDesc;
116 122
117 vector<FeatureTrajectoryPtr> features; 123 vector<FeatureTrajectoryPtr> features;
118 vector<FeaturePointMatch> featurePointMatches; 124 vector<FeaturePointMatch> featurePointMatches;
119 125
120 // TODO structure de donnee paires pointeur trajectory, numero de keypoint 126 // TODO structure de donnee paires pointeur trajectory, numero de keypoint
121 int key = '?'; 127 int key = '?';
128 unsigned int savedFeatureId=0;
122 for (int frameNum = params.frame1; ((params.frame1+frameNum < params.nFrames) || (params.nFrames < 0)) && !::interruptionKey(key); frameNum++) { 129 for (int frameNum = params.frame1; ((params.frame1+frameNum < params.nFrames) || (params.nFrames < 0)) && !::interruptionKey(key); frameNum++) {
123 capture >> frame; 130 capture >> frame;
124 cout << capture.get(CV_CAP_PROP_POS_FRAMES) << " " << prevPts.size() << endl; 131 cout << capture.get(CV_CAP_PROP_POS_FRAMES) << " " << prevPts.size() << endl;
125 while (frame.empty()) 132 while (frame.empty())
126 capture >> frame;//break; 133 capture >> frame;//break;
142 iter->feature->addPoint(frameNum, currPts[iter->pointNum]); 149 iter->feature->addPoint(frameNum, currPts[iter->pointNum]);
143 trackedPts.push_back(currPts[iter->pointNum]); 150 trackedPts.push_back(currPts[iter->pointNum]);
144 iter->pointNum = trackedPts.size()-1; 151 iter->pointNum = trackedPts.size()-1;
145 iter++; 152 iter++;
146 } else { 153 } else {
147 // save feature 154 iter->feature->setId(savedFeatureId);
155 savedFeatureId++;
156 iter->feature->write(trajectoryDB);
148 iter = featurePointMatches.erase(iter); 157 iter = featurePointMatches.erase(iter);
149 } 158 }
150 } 159 }
151 currPts = trackedPts; 160 currPts = trackedPts;
152 assert(currPts.size() == featurePointMatches.size()); 161 assert(currPts.size() == featurePointMatches.size());
183 imshow("mask", featureMask*256); 192 imshow("mask", featureMask*256);
184 previousFrameBW = currentFrameBW.clone(); 193 previousFrameBW = currentFrameBW.clone();
185 prevPts = currPts; 194 prevPts = currPts;
186 //prevKpts = currKpts; 195 //prevKpts = currKpts;
187 //currDesc.copyTo(prevDesc); 196 //currDesc.copyTo(prevDesc);
188 key = waitKey(0); 197 key = waitKey(2);
189 } 198 }
190 199
200 trajectoryDB.disconnect();
191 return 0; 201 return 0;
192 } 202 }
193 203
194 204
195 /* ------------------ DOCUMENTATION ------------------ */ 205 /* ------------------ DOCUMENTATION ------------------ */