diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-05 12:08:03 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-05 12:08:18 +0000 |
commit | 5da14042f70711ea5cf66e034699730335462f66 (patch) | |
tree | 0f6354ccac934ed87a2d555f45be4c831cf92f4a /src/ml/dlib/examples/image_ex.cpp | |
parent | Releasing debian version 1.44.3-2. (diff) | |
download | netdata-5da14042f70711ea5cf66e034699730335462f66.tar.xz netdata-5da14042f70711ea5cf66e034699730335462f66.zip |
Merging upstream version 1.45.3+dfsg.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/ml/dlib/examples/image_ex.cpp')
-rw-r--r-- | src/ml/dlib/examples/image_ex.cpp | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/src/ml/dlib/examples/image_ex.cpp b/src/ml/dlib/examples/image_ex.cpp new file mode 100644 index 000000000..148682694 --- /dev/null +++ b/src/ml/dlib/examples/image_ex.cpp @@ -0,0 +1,104 @@ +// The contents of this file are in the public domain. See LICENSE_FOR_EXAMPLE_PROGRAMS.txt +/* + + This is an example illustrating the use of the GUI API as well as some + aspects of image manipulation from the dlib C++ Library. + + + This is a pretty simple example. It takes a BMP file on the command line + and opens it up, runs a simple edge detection algorithm on it, and + displays the results on the screen. +*/ + + + +#include <dlib/gui_widgets.h> +#include <dlib/image_io.h> +#include <dlib/image_transforms.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]); + + + // Now let's use some image functions. First let's blur the image a little. + array2d<unsigned char> blurred_img; + gaussian_blur(img, blurred_img); + + // Now find the horizontal and vertical gradient images. + array2d<short> horz_gradient, vert_gradient; + array2d<unsigned char> edge_image; + sobel_edge_detector(blurred_img, horz_gradient, vert_gradient); + + // now we do the non-maximum edge suppression step so that our edges are nice and thin + suppress_non_maximum_edges(horz_gradient, vert_gradient, edge_image); + + // Now we would like to see what our images look like. So let's use a + // window to display them on the screen. (Note that you can zoom into + // the window by holding CTRL and scrolling the mouse wheel) + image_window my_window(edge_image, "Normal Edge Image"); + + // We can also easily display the edge_image as a heatmap or using the jet color + // scheme like so. + image_window win_hot(heatmap(edge_image)); + image_window win_jet(jet(edge_image)); + + // also make a window to display the original image + image_window my_window2(img, "Original Image"); + + // Sometimes you want to get input from the user about which pixels are important + // for some task. You can do this easily by trapping user clicks as shown below. + // This loop executes every time the user double clicks on some image pixel and it + // will terminate once the user closes the window. + point p; + while (my_window.get_next_double_click(p)) + { + cout << "User double clicked on pixel: " << p << endl; + cout << "edge pixel value at this location is: " << (int)edge_image[p.y()][p.x()] << endl; + } + + // wait until the user closes the windows before we let the program + // terminate. + win_hot.wait_until_closed(); + my_window2.wait_until_closed(); + + + // Finally, note that you can access the elements of an image using the normal [row][column] + // operator like so: + cout << horz_gradient[0][3] << endl; + cout << "number of rows in image: " << horz_gradient.nr() << endl; + cout << "number of columns in image: " << horz_gradient.nc() << endl; + } + catch (exception& e) + { + cout << "exception thrown: " << e.what() << endl; + } +} + +// ---------------------------------------------------------------------------- + |