### Navigation

- index
- next |
- previous |
- OpenCV 3.0.0-dev documentation »
- OpenCV Tutorials »
- feature2d module. 2D Features framework »

# Detection of planar objects

The goal of this tutorial is to learn how to use features2d and calib3d modules for detecting known planar objects in scenes.

Test data: use images in your data folder, for instance, `box.png` and `box_in_scene.png`.

1. Create a new console project. Read two input images.

       Mat img1 = imread(argv[1], IMREAD_GRAYSCALE);
       Mat img2 = imread(argv[2], IMREAD_GRAYSCALE);

2. Detect keypoints in both images and compute descriptors for each of the keypoints.

       // detecting keypoints
       Ptr<Feature2D> surf = SURF::create();
       vector<KeyPoint> keypoints1;
       Mat descriptors1;
       surf->detectAndCompute(img1, Mat(), keypoints1, descriptors1);

       ... // do the same for the second image

3. Now, find the closest matches between descriptors from the first image to the second:

       // matching descriptors
       BruteForceMatcher<L2<float> > matcher;
       vector<DMatch> matches;
       matcher.match(descriptors1, descriptors2, matches);

4. Visualize the results:

       // drawing the results
       namedWindow("matches", 1);
       Mat img_matches;
       drawMatches(img1, keypoints1, img2, keypoints2, matches, img_matches);
       imshow("matches", img_matches);
       waitKey(0);

5. Find the homography transformation between two sets of points:

       vector<Point2f> points1, points2;
       // fill the arrays with the points
       ....
       Mat H = findHomography(Mat(points1), Mat(points2), RANSAC, ransacReprojThreshold);

6. Create a set of inlier matches and draw them. Use perspectiveTransform function to map points with homography:

   > Mat points1Projected; perspectiveTransform(Mat(points1), points1Projected, H);

7. Use `drawMatches` for drawing inliers.

## Help and Feedback

You did not find what you were looking for?

- Ask a question on the Q&A forum.
- If you think something is missing or wrong in the documentation, please file a bug report.

### Navigation

- index
- next |
- previous |
- OpenCV 3.0.0-dev documentation »
- OpenCV Tutorials »
- feature2d module. 2D Features framework »