Mercurial > hg > nsaunier > 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 ------------------ */ |
