// The contents of this file are in the public domain. See LICENSE_FOR_EXAMPLE_PROGRAMS.txt /* 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. For a description of the SURF algorithm you should consult the following papers: 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 */ #include <dlib/image_keypoint/draw_surf_points.h> #include <dlib/image_io.h> #include <dlib/image_keypoint.h> #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; } // 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. array2d<rgb_pixel> img; // 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. load_image(img, argv[1]); // 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; if (sp.size() > 0) { // 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; } // 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); // 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; } } // ----------------------------------------------------------------------------