comparison c/feature-based-tracking.cpp @ 146:7150427c665e

added loading of mask
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Tue, 30 Aug 2011 13:04:36 -0400
parents 7bf8084e720f
children 0089fb29cd26
comparison
equal deleted inserted replaced
145:7bf8084e720f 146:7150427c665e
116 // { 116 // {
117 // //help(argv); 117 // //help(argv);
118 // cout << "capture device " << argv[1] << " failed to open!" << endl; 118 // cout << "capture device " << argv[1] << " failed to open!" << endl;
119 // return 1; 119 // return 1;
120 // } 120 // }
121
122 // mask
123 Mat mask = imread(params.maskFilename, 0);
124 if (mask.empty())
125 mask = Mat::ones(videoSize, CV_8UC1);
121 126
122 // database 127 // database
123 boost::shared_ptr<TrajectoryDBAccess<Point2f> > trajectoryDB = boost::shared_ptr<TrajectoryDBAccess<Point2f> >(new TrajectoryDBAccessList<Point2f>()); 128 boost::shared_ptr<TrajectoryDBAccess<Point2f> > trajectoryDB = boost::shared_ptr<TrajectoryDBAccess<Point2f> >(new TrajectoryDBAccessList<Point2f>());
124 //TrajectoryDBAccess<Point2f>* trajectoryDB = new TrajectoryDBAccessBlob<Point2f>(); 129 //TrajectoryDBAccess<Point2f>* trajectoryDB = new TrajectoryDBAccessBlob<Point2f>();
125 trajectoryDB->connect(params.databaseFilename.c_str()); 130 trajectoryDB->connect(params.databaseFilename.c_str());
205 // cout << matches.size() << " matches" << endl; 210 // cout << matches.size() << " matches" << endl;
206 //drawMatchesRelative(prevKpts, currKpts, matches, frame); 211 //drawMatchesRelative(prevKpts, currKpts, matches, frame);
207 } 212 }
208 213
209 // adding new features, using mask around existing feature positions 214 // adding new features, using mask around existing feature positions
210 Mat featureMask = Mat::ones(videoSize, CV_8UC1); 215 Mat featureMask = mask.clone();
211 for (unsigned int n=0;n<currPts.size(); n++) 216 for (unsigned int n=0;n<currPts.size(); n++)
212 for (int j=MAX(0, currPts[n].x-params.minFeatureDistanceKLT); j<MIN(videoSize.width, currPts[n].x+params.minFeatureDistanceKLT+1); j++) 217 for (int j=MAX(0, currPts[n].x-params.minFeatureDistanceKLT); j<MIN(videoSize.width, currPts[n].x+params.minFeatureDistanceKLT+1); j++)
213 for (int i=MAX(0, currPts[n].y-params.minFeatureDistanceKLT); i<MIN(videoSize.height, currPts[n].y+params.minFeatureDistanceKLT+1); i++) 218 for (int i=MAX(0, currPts[n].y-params.minFeatureDistanceKLT); i<MIN(videoSize.height, currPts[n].y+params.minFeatureDistanceKLT+1); i++)
214 featureMask.at<uchar>(i,j)=0; 219 featureMask.at<uchar>(i,j)=0;
215 goodFeaturesToTrack(currentFrameBW, newPts, params.maxNFeatures, params.featureQuality, params.minFeatureDistanceKLT, featureMask, params.windowSize, params.useHarrisDetector, params.k); 220 goodFeaturesToTrack(currentFrameBW, newPts, params.maxNFeatures, params.featureQuality, params.minFeatureDistanceKLT, featureMask, params.windowSize, params.useHarrisDetector, params.k);