Mercurial > hg > nsaunier > traffic-intelligence
comparison c/feature-based-tracking.cpp @ 123:df3bdd8e50ba
displays tracking from video and webcam
| author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
|---|---|
| date | Tue, 16 Aug 2011 00:46:22 -0400 |
| parents | 654f1c748644 |
| children | 1e68e18b1aa5 |
comparison
equal
deleted
inserted
replaced
| 122:654f1c748644 | 123:df3bdd8e50ba |
|---|---|
| 13 using namespace cv; | 13 using namespace cv; |
| 14 | 14 |
| 15 //#include "cv.h" | 15 //#include "cv.h" |
| 16 | 16 |
| 17 using namespace std; | 17 using namespace std; |
| 18 | |
| 19 void drawMatchesRelative(const vector<KeyPoint>& train, const vector<KeyPoint>& query, std::vector<cv::DMatch>& matches, Mat& img) { | |
| 20 for (int i = 0; i < (int)matches.size(); i++) | |
| 21 { | |
| 22 Point2f pt_new = query[matches[i].queryIdx].pt; | |
| 23 Point2f pt_old = train[matches[i].trainIdx].pt; | |
| 24 Point2f dist = pt_new - pt_old; | |
| 25 if (norm(dist) < 20) { | |
| 26 cv::line(img, pt_new, pt_old, Scalar(125, 255, 125), 1); | |
| 27 cv::circle(img, pt_new, 2, Scalar(255, 0, 125), 1); | |
| 28 } | |
| 29 } | |
| 30 } | |
| 18 | 31 |
| 19 int main(int argc, char *argv[]) { | 32 int main(int argc, char *argv[]) { |
| 20 | 33 |
| 21 BriefDescriptorExtractor brief(32); | 34 BriefDescriptorExtractor brief(32); |
| 22 | 35 |
| 68 GridAdaptedFeatureDetector detector(new FastFeatureDetector(10, true), DESIRED_FTRS, 4, 4); | 81 GridAdaptedFeatureDetector detector(new FastFeatureDetector(10, true), DESIRED_FTRS, 4, 4); |
| 69 | 82 |
| 70 int frameNum = 0; | 83 int frameNum = 0; |
| 71 for (;;) | 84 for (;;) |
| 72 { | 85 { |
| 73 frameNum+=2; | 86 frameNum++; |
| 87 //capture.set(CV_CAP_PROP_POS_FRAMES, frameNum); | |
| 88 //capture.grab();capture.grab();capture.retrieve(frame); | |
| 74 capture >> frame; | 89 capture >> frame; |
| 75 cout << capture.get(CV_CAP_PROP_POS_FRAMES) << endl; | 90 //cout << capture.get(CV_CAP_PROP_POS_FRAMES) << endl; |
| 76 if (frame.empty()) | 91 while (frame.empty()) |
| 77 break; | 92 capture >> frame;//break; |
| 78 | 93 |
| 79 cvtColor(frame, gray, CV_RGB2GRAY); | 94 cvtColor(frame, gray, CV_RGB2GRAY); |
| 80 | 95 |
| 81 detector.detect(gray, query_kpts); //Find interest points | 96 detector.detect(gray, query_kpts); //Find interest points |
| 97 cout << query_kpts.size() << " kpts" << endl; | |
| 82 | 98 |
| 83 brief.compute(gray, query_kpts, query_desc); //Compute brief descriptors at each keypoint location | 99 brief.compute(gray, query_kpts, query_desc); //Compute brief descriptors at each keypoint location |
| 84 | 100 |
| 85 // find how keypoints descriptions are matched to previous ones (in train kpts probably) | 101 // find how keypoints descriptions are matched to previous ones (in train kpts probably) |
| 86 display = frame.clone(); | 102 //display = frame.clone(); |
| 87 if (!train_kpts.empty()) | 103 if (!train_kpts.empty()) |
| 88 { | 104 { |
| 89 //vector<KeyPoint> test_kpts; | |
| 90 //warpKeypoints(H_prev.inv(), query_kpts, test_kpts); | |
| 91 //Mat mask = windowedMatchingMask(test_kpts, train_kpts, 25, 25); | |
| 92 desc_matcher.match(query_desc, train_desc, matches); | 105 desc_matcher.match(query_desc, train_desc, matches); |
| 93 drawMatches(frame, train_kpts, frame, query_kpts, matches, display);//, Scalar::all(-1), Scalar::all(-1), vector<vector<char> >(), DrawMatchesFlags::DRAW_OVER_OUTIMG); | 106 cout << "matches:" << matches.size() << endl; |
| 94 } // TODO do something like the match relative of the sample | 107 drawMatchesRelative(train_kpts, query_kpts, matches, frame); |
| 108 //drawMatches(frame, train_kpts, frame, query_kpts, matches, display);//, Scalar::all(-1), Scalar::all(-1), vector<vector<char> >(), DrawMatchesFlags::DRAW_OVER_OUTIMG); | |
| 109 } | |
| 95 | 110 |
| 96 imshow("frame", display); | 111 imshow("frame", frame); |
| 97 train_kpts = query_kpts; | 112 train_kpts = query_kpts; |
| 98 int key = waitKey(0); | 113 query_desc.copyTo(train_desc); |
| 114 int key = waitKey(5); | |
| 99 if (::interruptionKey(key)) | 115 if (::interruptionKey(key)) |
| 100 break; | 116 break; |
| 101 } | 117 } |
| 102 | 118 |
| 103 Feature f; | 119 Feature f; |
