Added a simple sample for descriptor matching
authorVictor Erukhimov <no@email>
Sat, 12 Jun 2010 05:45:28 +0000 (05:45 +0000)
committerVictor Erukhimov <no@email>
Sat, 12 Jun 2010 05:45:28 +0000 (05:45 +0000)
samples/cpp/matcher_simple.cpp [new file with mode: 0644]

diff --git a/samples/cpp/matcher_simple.cpp b/samples/cpp/matcher_simple.cpp
new file mode 100644 (file)
index 0000000..74c791b
--- /dev/null
@@ -0,0 +1,50 @@
+#include <stdio.h>
+#include <opencv2/core/core.hpp>
+#include <opencv2/features2d/features2d.hpp>
+#include <opencv2/highgui/highgui.hpp>
+
+using namespace cv;
+
+int main(int argc, char** argv)
+{
+       if(argc != 3)
+       {
+               printf("Usage: matches_simple <image1> <image2>\n");
+               return -1;
+       }
+
+       Mat img1 = imread(argv[1]);
+       Mat img2 = imread(argv[2]);
+       if(img1.empty() || img2.empty())
+       {
+               printf("Can't read one of the images\n");
+               return -1;
+       }
+
+       // detecting keypoints
+       SurfFeatureDetector detector(400);
+       vector<KeyPoint> keypoints1, keypoints2;
+       detector.detect(img1, keypoints1);
+       detector.detect(img2, keypoints2);
+
+       // computing descriptors
+       SurfDescriptorExtractor extractor;
+       Mat descriptors1, descriptors2;
+       extractor.compute(img1, keypoints1, descriptors1);
+       extractor.compute(img2, keypoints2, descriptors2);
+
+       // matching descriptors
+       BruteForceMatcher<L2<float> > matcher;
+       vector<int> matches;
+       matcher.add(descriptors1);
+       matcher.match(descriptors2, matches);
+
+       // drawing the results
+       namedWindow("matches", 1);
+       Mat img_matches;
+       drawMatches(img1, img2, keypoints1, keypoints2, matches, vector<char>(), img_matches);
+       imshow("matches", img_matches);
+       waitKey(0);
+
+       return 0;
+}