Mercurial Hosting > traffic-intelligence
diff c/feature-based-tracking.cpp @ 137:445e773c9be3
created the parameter structure to parse parameters (bug remaining)
author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
---|---|
date | Fri, 19 Aug 2011 01:35:45 -0400 |
parents | 0f790de9437e |
children | c1b260b48d2a |
line wrap: on
line diff
--- a/c/feature-based-tracking.cpp Thu Aug 18 22:25:21 2011 -0400 +++ b/c/feature-based-tracking.cpp Fri Aug 19 01:35:45 2011 -0400 @@ -60,56 +60,56 @@ VideoCapture capture; Mat frame, currentFrameBW, previousFrameBW; - KLTFeatureTrackingParameters params; - params.display = true; - params.frame1 = 0; - params.nFrames = -1; - params.maxNFeatures = 1000; - params.featureQuality = 0.1; - params.minFeatureDistanceKLT = 3; - params.windowSize = 3; - params.useHarrisDetector = false; - params.k = 0.4; - //GoodFeaturesToTrackDetector detector(params.maxNFeatures, params.featureQuality, params.minFeatureDistanceKLT, params.windowSize, params.useHarrisDetector, params.k); + KLTFeatureTrackingParameters params(argc, argv); + cout << params.parameterDescription << endl; + // params.display = true; + // params.frame1 = 0; + // params.nFrames = -1; + // params.maxNFeatures = 1000; + // params.featureQuality = 0.1; + // params.minFeatureDistanceKLT = 3; + // params.windowSize = 3; + // params.useHarrisDetector = false; + // params.k = 0.4; + // //GoodFeaturesToTrackDetector detector(params.maxNFeatures, params.featureQuality, params.minFeatureDistanceKLT, params.windowSize, params.useHarrisDetector, params.k); - params.pyramidLevel = 3; - params.nDisplacements = 3; - params.minFeatureDisplacement = 0.05; - float minTotalFeatureDisplacement = params.nDisplacements*params.minFeatureDisplacement; + // params.pyramidLevel = 3; + // params.nDisplacements = 3; + // params.minFeatureDisplacement = 0.05; - params.maxNumberTrackingIterations = 20; // 30 - params.minTrackingError = 0.3; // 0.01 - params.derivLambda = 0.5; - params.minFeatureTime = 20; + // params.maxNumberTrackingIterations = 20; // 30 + // params.minTrackingError = 0.3; // 0.01 + // params.minFeatureTime = 20; + float minTotalFeatureDisplacement = params.nDisplacements*params.minFeatureDisplacement; Size window = Size(params.windowSize, params.windowSize); BruteForceMatcher<Hamming> descMatcher; vector<DMatch> matches; Size videoSize; - if( argc == 1 || (argc == 2 && strlen(argv[1]) == 1 && isdigit(argv[1][0]))) // if no parameter or number parameter - capture.open(argc == 2 ? argv[1][0] - '0' : 0); - else if( argc >= 2 ) - { - capture.open(argv[1]); - if( capture.isOpened() ) - videoSize = Size(capture.get(CV_CAP_PROP_FRAME_WIDTH), capture.get(CV_CAP_PROP_FRAME_HEIGHT)); - cout << "Video " << argv[1] << - ": width=" << videoSize.width << - ", height=" << videoSize.height << - ", nframes=" << capture.get(CV_CAP_PROP_FRAME_COUNT) << endl; - if( argc > 2 && isdigit(argv[2][0]) ) // could be used to reach first frame, dumping library messages to log file (2> /tmp/log.txt) - { - sscanf(argv[2], "%d", ¶ms.frame1); - cout << "seeking to frame #" << params.frame1 << endl; - //cap.set(CV_CAP_PROP_POS_FRAMES, pos); - for (int i=0; i<params.frame1; i++) - capture >> frame; - } - } + // if( argc == 1 || (argc == 2 && strlen(argv[1]) == 1 && isdigit(argv[1][0]))) // if no parameter or number parameter + // capture.open(argc == 2 ? argv[1][0] - '0' : 0); + // else if( argc >= 2 ) + // { + // capture.open(argv[1]); + // if( capture.isOpened() ) + // videoSize = Size(capture.get(CV_CAP_PROP_FRAME_WIDTH), capture.get(CV_CAP_PROP_FRAME_HEIGHT)); + // cout << "Video " << argv[1] << + // ": width=" << videoSize.width << + // ", height=" << videoSize.height << + // ", nframes=" << capture.get(CV_CAP_PROP_FRAME_COUNT) << endl; + // if( argc > 2 && isdigit(argv[2][0]) ) // could be used to reach first frame, dumping library messages to log file (2> /tmp/log.txt) + // { + // sscanf(argv[2], "%d", ¶ms.frame1); + // cout << "seeking to frame #" << params.frame1 << endl; + // //cap.set(CV_CAP_PROP_POS_FRAMES, pos); + // for (int i=0; i<params.frame1; i++) + // capture >> frame; + // } + // } - // capture.open(atoi(argv[1])); + capture.open(params.videoFilename); if (!capture.isOpened()) { //help(argv); @@ -149,7 +149,7 @@ if (!prevPts.empty()) { //::keyPoints2Points(prevKpts, prevPts); currPts.clear(); - calcOpticalFlowPyrLK(previousFrameBW, currentFrameBW, prevPts, currPts, status, errors, window, params.pyramidLevel, TermCriteria(3 /*static_cast<int>(TermCriteria::COUNT)+static_cast<int>(TermCriteria::EPS)*/, params.maxNumberTrackingIterations, params.minTrackingError), params.derivLambda, 0); // OPTFLOW_USE_INITIAL_FLOW + calcOpticalFlowPyrLK(previousFrameBW, currentFrameBW, prevPts, currPts, status, errors, window, params.pyramidLevel, TermCriteria(3 /*static_cast<int>(TermCriteria::COUNT)+static_cast<int>(TermCriteria::EPS)*/, params.maxNumberTrackingIterations, params.minTrackingError), 0.5 /* unused */, 0); // OPTFLOW_USE_INITIAL_FLOW vector<Point2f> trackedPts; vector<FeaturePointMatch>::iterator iter = featurePointMatches.begin();