Mercurial > hg > nsaunier > traffic-intelligence
comparison c/feature-based-tracking.cpp @ 138:c1b260b48d2a
corrected initialization bugs and feature shortening before saving
| author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
|---|---|
| date | Fri, 19 Aug 2011 12:15:23 -0400 |
| parents | 445e773c9be3 |
| children | 47329bd16cc0 |
comparison
equal
deleted
inserted
replaced
| 137:445e773c9be3 | 138:c1b260b48d2a |
|---|---|
| 108 // capture >> frame; | 108 // capture >> frame; |
| 109 // } | 109 // } |
| 110 // } | 110 // } |
| 111 | 111 |
| 112 capture.open(params.videoFilename); | 112 capture.open(params.videoFilename); |
| 113 if (!capture.isOpened()) | 113 if(capture.isOpened()) { |
| 114 { | 114 videoSize = Size(capture.get(CV_CAP_PROP_FRAME_WIDTH), capture.get(CV_CAP_PROP_FRAME_HEIGHT)); |
| 115 //help(argv); | 115 cout << "Video " << argv[1] << |
| 116 cout << "capture device " << argv[1] << " failed to open!" << endl; | 116 ": width=" << videoSize.width << |
| 117 return 1; | 117 ", height=" << videoSize.height << |
| 118 } | 118 ", nframes=" << capture.get(CV_CAP_PROP_FRAME_COUNT) << endl; |
| 119 } else { | |
| 120 cout << "Video filename " << params.videoFilename << " could not be opened. Exiting." << endl; | |
| 121 exit(0); | |
| 122 } | |
| 123 // if (!capture.isOpened()) | |
| 124 // { | |
| 125 // //help(argv); | |
| 126 // cout << "capture device " << argv[1] << " failed to open!" << endl; | |
| 127 // return 1; | |
| 128 // } | |
| 119 | 129 |
| 120 // database | 130 // database |
| 121 TrajectoryDBAccess<Point2f>* trajectoryDB = new TrajectoryDBAccessList<Point2f>(); | 131 TrajectoryDBAccess<Point2f>* trajectoryDB = new TrajectoryDBAccessList<Point2f>(); |
| 122 //TrajectoryDBAccess<Point2f>* trajectoryDB = new TrajectoryDBAccessBlob<Point2f>(); | 132 //TrajectoryDBAccess<Point2f>* trajectoryDB = new TrajectoryDBAccessBlob<Point2f>(); |
| 123 trajectoryDB->connect("test.sqlite"); | 133 trajectoryDB->connect(params.databaseFilename.c_str()); |
| 124 trajectoryDB->createTable(); | 134 trajectoryDB->createTable(); |
| 125 | 135 |
| 126 vector<KeyPoint> prevKpts, currKpts; | 136 vector<KeyPoint> prevKpts, currKpts; |
| 127 vector<Point2f> prevPts, currPts, newPts; | 137 vector<Point2f> prevPts, currPts, newPts; |
| 128 vector<uchar> status; | 138 vector<uchar> status; |
| 156 while (iter != featurePointMatches.end()) { | 166 while (iter != featurePointMatches.end()) { |
| 157 bool deleteFeature = false; | 167 bool deleteFeature = false; |
| 158 | 168 |
| 159 if (status[iter->pointNum]) { | 169 if (status[iter->pointNum]) { |
| 160 iter->feature->addPoint(frameNum, currPts[iter->pointNum]); | 170 iter->feature->addPoint(frameNum, currPts[iter->pointNum]); |
| 161 trackedPts.push_back(currPts[iter->pointNum]); | 171 |
| 162 iter->pointNum = trackedPts.size()-1; | 172 bool smallDisplacement = iter->feature->smallDisplacement(params.nDisplacements, minTotalFeatureDisplacement); |
| 163 | 173 if (smallDisplacement) |
| 164 deleteFeature |= !iter->feature->largeDisplacement(params.nDisplacements, minTotalFeatureDisplacement); | 174 iter->feature->shorten(); |
| 175 deleteFeature |= smallDisplacement; | |
| 165 // motionSmooth() | 176 // motionSmooth() |
| 166 } | 177 } |
| 167 | 178 |
| 168 if (deleteFeature) { | 179 if (deleteFeature) { |
| 169 if (iter->feature->length() >= params.minFeatureTime) { | 180 if (iter->feature->length() >= params.minFeatureTime) { |
| 170 iter->feature->setId(savedFeatureId); | 181 iter->feature->setId(savedFeatureId); |
| 171 savedFeatureId++; | 182 savedFeatureId++; |
| 172 iter->feature->write(*trajectoryDB); | 183 iter->feature->write(*trajectoryDB); |
| 173 } | 184 } |
| 174 iter = featurePointMatches.erase(iter); | 185 iter = featurePointMatches.erase(iter); |
| 175 } else | 186 } else { |
| 187 trackedPts.push_back(currPts[iter->pointNum]); | |
| 188 iter->pointNum = trackedPts.size()-1; | |
| 176 iter++; | 189 iter++; |
| 190 } | |
| 177 } | 191 } |
| 178 currPts = trackedPts; | 192 currPts = trackedPts; |
| 179 assert(currPts.size() == featurePointMatches.size()); | 193 assert(currPts.size() == featurePointMatches.size()); |
| 180 | 194 |
| 181 if (params.display) | 195 if (params.display) |
