surf_ex.cpp 3 KB
Newer Older
1
2
3
// The contents of this file are in the public domain. See LICENSE_FOR_EXAMPLE_PROGRAMS.txt
/*

Davis King's avatar
Davis King committed
4
5
6
    This is a simple example illustrating the use of the get_surf_points() function.  It
    pulls out SURF points from an input image and displays them on the screen as an overlay
    on the image.
7

Davis King's avatar
Davis King committed
8
    For a description of the SURF algorithm you should consult the following papers:
9
10
11
12
13
14
15
16
17
18
19
        This is the original paper which introduced the algorithm:
            SURF: Speeded Up Robust Features
            By Herbert Bay, Tinne Tuytelaars, and Luc Van Gool

        This paper provides a nice detailed overview of how the algorithm works:
            Notes on the OpenSURF Library by Christopher Evans

*/



Davis King's avatar
Davis King committed
20
#include <dlib/image_keypoint/draw_surf_points.h>
21
22
#include <dlib/image_io.h>
#include <dlib/image_keypoint.h>
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <fstream>


using namespace std;
using namespace dlib;

//  ----------------------------------------------------------------------------

int main(int argc, char** argv)
{
    try
    {
        // make sure the user entered an argument to this program
        if (argc != 2)
        {
            cout << "error, you have to enter a BMP file as an argument to this program" << endl;
            return 1;
        }

Davis King's avatar
Davis King committed
42
43
        // Here we declare an image object that can store rgb_pixels.  Note that in dlib
        // there is no explicit image object, just a 2D array and various pixel types.  
44
        array2d<rgb_pixel> img;
45

Davis King's avatar
Davis King committed
46
47
48
        // Now load the image file into our image.  If something is wrong then load_image()
        // will throw an exception.  Also, if you linked with libpng and libjpeg then
        // load_image() can load PNG and JPEG files in addition to BMP files. 
49
        load_image(img, argv[1]);
50

Davis King's avatar
Davis King committed
51
52
53
54
55
        // Get SURF points from the image.  Note that get_surf_points() has some optional
        // arguments that allow you to control the number of points you get back.  Here we
        // simply take the default.
        std::vector<surf_point> sp = get_surf_points(img);
        cout << "number of SURF points found: "<< sp.size() << endl;
56

Davis King's avatar
Davis King committed
57
        if (sp.size() > 0)
58
        {
Davis King's avatar
Davis King committed
59
60
61
62
63
            // A surf_point object contains a lot of information describing each point.
            // The most important fields are shown below:
            cout << "center of first SURF point: "<< sp[0].p.center << endl;
            cout << "pyramid scale:     " << sp[0].p.scale << endl;
            cout << "SURF descriptor: \n" << sp[0].des << endl;
64
65
        }

Davis King's avatar
Davis King committed
66
67
68
69
70
        // Create a window to display the input image and the SURF points.  (Note that
        // you can zoom into the window by holding CTRL and scrolling the mouse wheel)
        image_window my_window(img);
        draw_surf_points(my_window, sp);

71
72
73
74
75
76
77
78
79
80
81
82
        // wait until the user closes the window before we let the program 
        // terminate.
        my_window.wait_until_closed();
    }
    catch (exception& e)
    {
        cout << "exception thrown: " << e.what() << endl;
    }
}

//  ----------------------------------------------------------------------------