summaryrefslogtreecommitdiffstats
path: root/ml/dlib/examples/surf_ex.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ml/dlib/examples/surf_ex.cpp')
-rw-r--r--ml/dlib/examples/surf_ex.cpp82
1 files changed, 82 insertions, 0 deletions
diff --git a/ml/dlib/examples/surf_ex.cpp b/ml/dlib/examples/surf_ex.cpp
new file mode 100644
index 000000000..70fe19008
--- /dev/null
+++ b/ml/dlib/examples/surf_ex.cpp
@@ -0,0 +1,82 @@
+// 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;
+ }
+}
+
+// ----------------------------------------------------------------------------
+