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.
Mat img1 = imread(argv[1], IMREAD_GRAYSCALE); Mat img2 = imread(argv[2], IMREAD_GRAYSCALE);
// 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
// matching descriptors BruteForceMatcher<L2<float> > matcher; vector<DMatch> matches; matcher.match(descriptors1, descriptors2, matches);
// drawing the results namedWindow("matches", 1); Mat img_matches; drawMatches(img1, keypoints1, img2, keypoints2, matches, img_matches); imshow("matches", img_matches); waitKey(0);
vector<Point2f> points1, points2; // fill the arrays with the points .... Mat H = findHomography(Mat(points1), Mat(points2), RANSAC, ransacReprojThreshold);
Create a set of inlier matches and draw them. Use perspectiveTransform function to map points with homography:
Mat points1Projected; perspectiveTransform(Mat(points1), points1Projected, H);