Mercurial Hosting > traffic-intelligence
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 ------------------ */ |