60 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			60 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
#include <stdio.h>
 | 
						|
#include "opencv2/core/core.hpp"
 | 
						|
#include "opencv2/features2d/features2d.hpp"
 | 
						|
#include "opencv2/highgui/highgui.hpp"
 | 
						|
#include "opencv2/nonfree/nonfree.hpp"
 | 
						|
 | 
						|
using namespace std;
 | 
						|
using namespace cv;
 | 
						|
 | 
						|
static void help()
 | 
						|
{
 | 
						|
    printf("\nThis program demonstrates using features2d detector, descriptor extractor and simple matcher\n"
 | 
						|
            "Using the SURF desriptor:\n"
 | 
						|
            "\n"
 | 
						|
            "Usage:\n matcher_simple <image1> <image2>\n");
 | 
						|
}
 | 
						|
 | 
						|
int main(int argc, char** argv)
 | 
						|
{
 | 
						|
    if(argc != 3)
 | 
						|
    {
 | 
						|
        help();
 | 
						|
        return -1;
 | 
						|
    }
 | 
						|
 | 
						|
    Mat img1 = imread(argv[1], IMREAD_GRAYSCALE);
 | 
						|
    Mat img2 = imread(argv[2], IMREAD_GRAYSCALE);
 | 
						|
    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
 | 
						|
    BFMatcher matcher(NORM_L2);
 | 
						|
    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);
 | 
						|
 | 
						|
    return 0;
 | 
						|
}
 |