Update documentation and samples

pull/12136/head
Suleyman TURKMEN 6 years ago
parent 1c73e66edf
commit c61bc3a0cb
  1. 3
      doc/tutorials/core/basic_linear_transform/basic_linear_transform.markdown
  2. 2
      doc/tutorials/core/discrete_fourier_transform/discrete_fourier_transform.markdown
  3. 3
      doc/tutorials/core/file_input_output_with_xml_yml/file_input_output_with_xml_yml.markdown
  4. 3
      doc/tutorials/core/how_to_scan_images/how_to_scan_images.markdown
  5. 2
      doc/tutorials/core/how_to_use_OpenCV_parallel_for_/how_to_use_OpenCV_parallel_for_.markdown
  6. 3
      doc/tutorials/core/how_to_use_ippa_conversion/how_to_use_ippa_conversion.markdown
  7. 3
      doc/tutorials/core/interoperability_with_OpenCV_1/interoperability_with_OpenCV_1.markdown
  8. 3
      doc/tutorials/core/mat_operations.markdown
  9. 2
      doc/tutorials/core/mat_the_basic_image_container/mat_the_basic_image_container.markdown
  10. 18
      doc/tutorials/core/table_of_content_core.markdown
  11. 61
      doc/tutorials/imgproc/basic_geometric_drawing/basic_geometric_drawing.markdown
  12. 0
      doc/tutorials/imgproc/basic_geometric_drawing/images/Drawing_1_Tutorial_Result_0.png
  13. 3
      doc/tutorials/imgproc/erosion_dilatation/erosion_dilatation.markdown
  14. 1
      doc/tutorials/imgproc/gausian_median_blur_bilateral_filter/gausian_median_blur_bilateral_filter.markdown
  15. 3
      doc/tutorials/imgproc/histograms/back_projection/back_projection.markdown
  16. 3
      doc/tutorials/imgproc/histograms/histogram_calculation/histogram_calculation.markdown
  17. 3
      doc/tutorials/imgproc/histograms/histogram_comparison/histogram_comparison.markdown
  18. 3
      doc/tutorials/imgproc/histograms/histogram_equalization/histogram_equalization.markdown
  19. 3
      doc/tutorials/imgproc/imgtrans/canny_detector/canny_detector.markdown
  20. 3
      doc/tutorials/imgproc/imgtrans/distance_transformation/distance_transform.markdown
  21. 3
      doc/tutorials/imgproc/imgtrans/remap/remap.markdown
  22. 3
      doc/tutorials/imgproc/imgtrans/warp_affine/warp_affine.markdown
  23. 3
      doc/tutorials/imgproc/opening_closing_hats/opening_closing_hats.markdown
  24. 2
      doc/tutorials/imgproc/out_of_focus_deblur_filter/out_of_focus_deblur_filter.markdown
  25. 0
      doc/tutorials/imgproc/random_generator_and_text/images/Drawing_2_Tutorial_Result_0.jpg
  26. 0
      doc/tutorials/imgproc/random_generator_and_text/images/Drawing_2_Tutorial_Result_2.jpg
  27. 0
      doc/tutorials/imgproc/random_generator_and_text/images/Drawing_2_Tutorial_Result_3.jpg
  28. 0
      doc/tutorials/imgproc/random_generator_and_text/images/Drawing_2_Tutorial_Result_5.jpg
  29. 0
      doc/tutorials/imgproc/random_generator_and_text/images/Drawing_2_Tutorial_Result_big.jpg
  30. 3
      doc/tutorials/imgproc/random_generator_and_text/random_generator_and_text.markdown
  31. 3
      doc/tutorials/imgproc/shapedescriptors/bounding_rects_circles/bounding_rects_circles.markdown
  32. 3
      doc/tutorials/imgproc/shapedescriptors/bounding_rotated_ellipses/bounding_rotated_ellipses.markdown
  33. 3
      doc/tutorials/imgproc/shapedescriptors/find_contours/find_contours.markdown
  34. 3
      doc/tutorials/imgproc/shapedescriptors/hull/hull.markdown
  35. 3
      doc/tutorials/imgproc/shapedescriptors/moments/moments.markdown
  36. 3
      doc/tutorials/imgproc/shapedescriptors/point_polygon_test/point_polygon_test.markdown
  37. 18
      doc/tutorials/imgproc/table_of_content_imgproc.markdown
  38. 3
      doc/tutorials/imgproc/threshold/threshold.markdown
  39. 3
      doc/tutorials/imgproc/threshold_inRange/threshold_inRange.markdown
  40. 12
      doc/tutorials/stitching/stitcher/stitcher.markdown
  41. 6
      modules/calib3d/include/opencv2/calib3d.hpp
  42. 31
      modules/core/include/opencv2/core.hpp
  43. 2
      modules/core/include/opencv2/core/mat.hpp
  44. 4
      modules/core/include/opencv2/core/persistence.hpp
  45. 14
      modules/dnn/include/opencv2/dnn.hpp
  46. 7
      modules/highgui/include/opencv2/highgui.hpp
  47. 79
      modules/imgproc/include/opencv2/imgproc.hpp
  48. 8
      modules/objdetect/include/opencv2/objdetect.hpp
  49. 4
      modules/photo/include/opencv2/photo.hpp
  50. 2
      modules/shape/include/opencv2/shape/shape_distance.hpp
  51. 8
      modules/stitching/include/opencv2/stitching.hpp
  52. 11
      modules/video/include/opencv2/video/tracking.hpp
  53. 7
      modules/videoio/include/opencv2/videoio.hpp
  54. 36
      samples/cpp/connected_components.cpp
  55. 27
      samples/cpp/squares.cpp
  56. 20
      samples/cpp/stitching.cpp
  57. 42
      samples/cpp/stitching_detailed.cpp
  58. 2
      samples/cpp/tutorial_code/ImgProc/Morphology_2.cpp
  59. 0
      samples/cpp/tutorial_code/ImgProc/basic_drawing/Drawing_1.cpp
  60. 0
      samples/cpp/tutorial_code/ImgProc/basic_drawing/Drawing_2.cpp
  61. 0
      samples/java/tutorial_code/ImgProc/BasicGeometricDrawing/BasicGeometricDrawing.java
  62. 0
      samples/python/tutorial_code/imgProc/BasicGeometricDrawing/basic_geometric_drawing.py
  63. 21
      samples/tapi/squares.cpp

@ -1,6 +1,9 @@
Changing the contrast and brightness of an image! {#tutorial_basic_linear_transform} Changing the contrast and brightness of an image! {#tutorial_basic_linear_transform}
================================================= =================================================
@prev_tutorial{tutorial_adding_images}
@next_tutorial{tutorial_discrete_fourier_transform}
Goal Goal
---- ----

@ -1,7 +1,7 @@
Discrete Fourier Transform {#tutorial_discrete_fourier_transform} Discrete Fourier Transform {#tutorial_discrete_fourier_transform}
========================== ==========================
@prev_tutorial{tutorial_random_generator_and_text} @prev_tutorial{tutorial_basic_linear_transform}
@next_tutorial{tutorial_file_input_output_with_xml_yml} @next_tutorial{tutorial_file_input_output_with_xml_yml}
Goal Goal

@ -1,6 +1,9 @@
File Input and Output using XML and YAML files {#tutorial_file_input_output_with_xml_yml} File Input and Output using XML and YAML files {#tutorial_file_input_output_with_xml_yml}
============================================== ==============================================
@prev_tutorial{tutorial_discrete_fourier_transform}
@next_tutorial{tutorial_interoperability_with_OpenCV_1}
Goal Goal
---- ----

@ -1,6 +1,9 @@
How to scan images, lookup tables and time measurement with OpenCV {#tutorial_how_to_scan_images} How to scan images, lookup tables and time measurement with OpenCV {#tutorial_how_to_scan_images}
================================================================== ==================================================================
@prev_tutorial{tutorial_mat_the_basic_image_container}
@next_tutorial{tutorial_mat_mask_operations}
Goal Goal
---- ----

@ -1,6 +1,8 @@
How to use the OpenCV parallel_for_ to parallelize your code {#tutorial_how_to_use_OpenCV_parallel_for_} How to use the OpenCV parallel_for_ to parallelize your code {#tutorial_how_to_use_OpenCV_parallel_for_}
================================================================== ==================================================================
@prev_tutorial{tutorial_how_to_use_ippa_conversion}
Goal Goal
---- ----

@ -1,6 +1,9 @@
Intel® IPP Asynchronous C/C++ library in OpenCV {#tutorial_how_to_use_ippa_conversion} Intel® IPP Asynchronous C/C++ library in OpenCV {#tutorial_how_to_use_ippa_conversion}
=============================================== ===============================================
@prev_tutorial{tutorial_interoperability_with_OpenCV_1}
@next_tutorial{tutorial_how_to_use_OpenCV_parallel_for_}
Goal Goal
---- ----

@ -1,6 +1,9 @@
Interoperability with OpenCV 1 {#tutorial_interoperability_with_OpenCV_1} Interoperability with OpenCV 1 {#tutorial_interoperability_with_OpenCV_1}
============================== ==============================
@prev_tutorial{tutorial_file_input_output_with_xml_yml}
@next_tutorial{tutorial_how_to_use_ippa_conversion}
Goal Goal
---- ----

@ -1,6 +1,9 @@
Operations with images {#tutorial_mat_operations} Operations with images {#tutorial_mat_operations}
====================== ======================
@prev_tutorial{tutorial_mat_mask_operations}
@next_tutorial{tutorial_adding_images}
Input/Output Input/Output
------------ ------------

@ -1,6 +1,8 @@
Mat - The Basic Image Container {#tutorial_mat_the_basic_image_container} Mat - The Basic Image Container {#tutorial_mat_the_basic_image_container}
=============================== ===============================
@next_tutorial{tutorial_how_to_scan_images}
Goal Goal
---- ----

@ -62,24 +62,6 @@ understanding how to manipulate the images on a pixel level.
We will learn how to change our image appearance! We will learn how to change our image appearance!
- @subpage tutorial_basic_geometric_drawing
*Languages:* C++, Java, Python
*Compatibility:* \> OpenCV 2.0
*Author:* Ana Huamán
We will learn how to draw simple geometry with OpenCV!
- @subpage tutorial_random_generator_and_text
*Compatibility:* \> OpenCV 2.0
*Author:* Ana Huamán
We will draw some *fancy-looking* stuff using OpenCV!
- @subpage tutorial_discrete_fourier_transform - @subpage tutorial_discrete_fourier_transform
*Languages:* C++, Java, Python *Languages:* C++, Java, Python

@ -1,7 +1,6 @@
Basic Drawing {#tutorial_basic_geometric_drawing} Basic Drawing {#tutorial_basic_geometric_drawing}
============= =============
@prev_tutorial{tutorial_basic_linear_transform}
@next_tutorial{tutorial_random_generator_and_text} @next_tutorial{tutorial_random_generator_and_text}
Goals Goals
@ -82,20 +81,20 @@ Code
@add_toggle_cpp @add_toggle_cpp
- This code is in your OpenCV sample folder. Otherwise you can grab it from - This code is in your OpenCV sample folder. Otherwise you can grab it from
[here](https://raw.githubusercontent.com/opencv/opencv/3.4/samples/cpp/tutorial_code/core/Matrix/Drawing_1.cpp) [here](https://raw.githubusercontent.com/opencv/opencv/3.4/samples/cpp/tutorial_code/ImgProc/basic_drawing/Drawing_1.cpp)
@include samples/cpp/tutorial_code/core/Matrix/Drawing_1.cpp @include samples/cpp/tutorial_code/ImgProc/basic_drawing/Drawing_1.cpp
@end_toggle @end_toggle
@add_toggle_java @add_toggle_java
- This code is in your OpenCV sample folder. Otherwise you can grab it from - This code is in your OpenCV sample folder. Otherwise you can grab it from
[here](https://raw.githubusercontent.com/opencv/opencv/3.4/samples/java/tutorial_code/core/BasicGeometricDrawing/BasicGeometricDrawing.java) [here](https://raw.githubusercontent.com/opencv/opencv/3.4/samples/java/tutorial_code/ImgProc/BasicGeometricDrawing/BasicGeometricDrawing.java)
@include samples/java/tutorial_code/core/BasicGeometricDrawing/BasicGeometricDrawing.java @include samples/java/tutorial_code/ImgProc/BasicGeometricDrawing/BasicGeometricDrawing.java
@end_toggle @end_toggle
@add_toggle_python @add_toggle_python
- This code is in your OpenCV sample folder. Otherwise you can grab it from - This code is in your OpenCV sample folder. Otherwise you can grab it from
[here](https://raw.githubusercontent.com/opencv/opencv/3.4/samples/python/tutorial_code/core/BasicGeometricDrawing/basic_geometric_drawing.py) [here](https://raw.githubusercontent.com/opencv/opencv/3.4/samples/python/tutorial_code/imgProc/BasicGeometricDrawing/basic_geometric_drawing.py)
@include samples/python/tutorial_code/core/BasicGeometricDrawing/basic_geometric_drawing.py @include samples/python/tutorial_code/imgProc/BasicGeometricDrawing/basic_geometric_drawing.py
@end_toggle @end_toggle
Explanation Explanation
@ -104,42 +103,42 @@ Explanation
Since we plan to draw two examples (an atom and a rook), we have to create two images and two Since we plan to draw two examples (an atom and a rook), we have to create two images and two
windows to display them. windows to display them.
@add_toggle_cpp @add_toggle_cpp
@snippet cpp/tutorial_code/core/Matrix/Drawing_1.cpp create_images @snippet cpp/tutorial_code/ImgProc/basic_drawing/Drawing_1.cpp create_images
@end_toggle @end_toggle
@add_toggle_java @add_toggle_java
@snippet java/tutorial_code/core/BasicGeometricDrawing/BasicGeometricDrawing.java create_images @snippet java/tutorial_code/ImgProc/BasicGeometricDrawing/BasicGeometricDrawing.java create_images
@end_toggle @end_toggle
@add_toggle_python @add_toggle_python
@snippet python/tutorial_code/core/BasicGeometricDrawing/basic_geometric_drawing.py create_images @snippet python/tutorial_code/imgProc/BasicGeometricDrawing/basic_geometric_drawing.py create_images
@end_toggle @end_toggle
We created functions to draw different geometric shapes. For instance, to draw the atom we used We created functions to draw different geometric shapes. For instance, to draw the atom we used
**MyEllipse** and **MyFilledCircle**: **MyEllipse** and **MyFilledCircle**:
@add_toggle_cpp @add_toggle_cpp
@snippet cpp/tutorial_code/core/Matrix/Drawing_1.cpp draw_atom @snippet cpp/tutorial_code/ImgProc/basic_drawing/Drawing_1.cpp draw_atom
@end_toggle @end_toggle
@add_toggle_java @add_toggle_java
@snippet java/tutorial_code/core/BasicGeometricDrawing/BasicGeometricDrawing.java draw_atom @snippet java/tutorial_code/ImgProc/BasicGeometricDrawing/BasicGeometricDrawing.java draw_atom
@end_toggle @end_toggle
@add_toggle_python @add_toggle_python
@snippet python/tutorial_code/core/BasicGeometricDrawing/basic_geometric_drawing.py draw_atom @snippet python/tutorial_code/imgProc/BasicGeometricDrawing/basic_geometric_drawing.py draw_atom
@end_toggle @end_toggle
And to draw the rook we employed **MyLine**, **rectangle** and a **MyPolygon**: And to draw the rook we employed **MyLine**, **rectangle** and a **MyPolygon**:
@add_toggle_cpp @add_toggle_cpp
@snippet cpp/tutorial_code/core/Matrix/Drawing_1.cpp draw_rook @snippet cpp/tutorial_code/ImgProc/basic_drawing/Drawing_1.cpp draw_rook
@end_toggle @end_toggle
@add_toggle_java @add_toggle_java
@snippet java/tutorial_code/core/BasicGeometricDrawing/BasicGeometricDrawing.java draw_rook @snippet java/tutorial_code/ImgProc/BasicGeometricDrawing/BasicGeometricDrawing.java draw_rook
@end_toggle @end_toggle
@add_toggle_python @add_toggle_python
@snippet python/tutorial_code/core/BasicGeometricDrawing/basic_geometric_drawing.py draw_rook @snippet python/tutorial_code/imgProc/BasicGeometricDrawing/basic_geometric_drawing.py draw_rook
@end_toggle @end_toggle
@ -149,15 +148,15 @@ Let's check what is inside each of these functions:
<H4>MyLine</H4> <H4>MyLine</H4>
@add_toggle_cpp @add_toggle_cpp
@snippet cpp/tutorial_code/core/Matrix/Drawing_1.cpp my_line @snippet cpp/tutorial_code/ImgProc/basic_drawing/Drawing_1.cpp my_line
@end_toggle @end_toggle
@add_toggle_java @add_toggle_java
@snippet java/tutorial_code/core/BasicGeometricDrawing/BasicGeometricDrawing.java my_line @snippet java/tutorial_code/ImgProc/BasicGeometricDrawing/BasicGeometricDrawing.java my_line
@end_toggle @end_toggle
@add_toggle_python @add_toggle_python
@snippet python/tutorial_code/core/BasicGeometricDrawing/basic_geometric_drawing.py my_line @snippet python/tutorial_code/imgProc/BasicGeometricDrawing/basic_geometric_drawing.py my_line
@end_toggle @end_toggle
- As we can see, **MyLine** just call the function **line()** , which does the following: - As we can see, **MyLine** just call the function **line()** , which does the following:
@ -170,15 +169,15 @@ Let's check what is inside each of these functions:
<H4>MyEllipse</H4> <H4>MyEllipse</H4>
@add_toggle_cpp @add_toggle_cpp
@snippet cpp/tutorial_code/core/Matrix/Drawing_1.cpp my_ellipse @snippet cpp/tutorial_code/ImgProc/basic_drawing/Drawing_1.cpp my_ellipse
@end_toggle @end_toggle
@add_toggle_java @add_toggle_java
@snippet java/tutorial_code/core/BasicGeometricDrawing/BasicGeometricDrawing.java my_ellipse @snippet java/tutorial_code/ImgProc/BasicGeometricDrawing/BasicGeometricDrawing.java my_ellipse
@end_toggle @end_toggle
@add_toggle_python @add_toggle_python
@snippet python/tutorial_code/core/BasicGeometricDrawing/basic_geometric_drawing.py my_ellipse @snippet python/tutorial_code/imgProc/BasicGeometricDrawing/basic_geometric_drawing.py my_ellipse
@end_toggle @end_toggle
- From the code above, we can observe that the function **ellipse()** draws an ellipse such - From the code above, we can observe that the function **ellipse()** draws an ellipse such
@ -194,15 +193,15 @@ Let's check what is inside each of these functions:
<H4>MyFilledCircle</H4> <H4>MyFilledCircle</H4>
@add_toggle_cpp @add_toggle_cpp
@snippet cpp/tutorial_code/core/Matrix/Drawing_1.cpp my_filled_circle @snippet cpp/tutorial_code/ImgProc/basic_drawing/Drawing_1.cpp my_filled_circle
@end_toggle @end_toggle
@add_toggle_java @add_toggle_java
@snippet java/tutorial_code/core/BasicGeometricDrawing/BasicGeometricDrawing.java my_filled_circle @snippet java/tutorial_code/ImgProc/BasicGeometricDrawing/BasicGeometricDrawing.java my_filled_circle
@end_toggle @end_toggle
@add_toggle_python @add_toggle_python
@snippet python/tutorial_code/core/BasicGeometricDrawing/basic_geometric_drawing.py my_filled_circle @snippet python/tutorial_code/imgProc/BasicGeometricDrawing/basic_geometric_drawing.py my_filled_circle
@end_toggle @end_toggle
- Similar to the ellipse function, we can observe that *circle* receives as arguments: - Similar to the ellipse function, we can observe that *circle* receives as arguments:
@ -215,15 +214,15 @@ Let's check what is inside each of these functions:
<H4>MyPolygon</H4> <H4>MyPolygon</H4>
@add_toggle_cpp @add_toggle_cpp
@snippet cpp/tutorial_code/core/Matrix/Drawing_1.cpp my_polygon @snippet cpp/tutorial_code/ImgProc/basic_drawing/Drawing_1.cpp my_polygon
@end_toggle @end_toggle
@add_toggle_java @add_toggle_java
@snippet java/tutorial_code/core/BasicGeometricDrawing/BasicGeometricDrawing.java my_polygon @snippet java/tutorial_code/ImgProc/BasicGeometricDrawing/BasicGeometricDrawing.java my_polygon
@end_toggle @end_toggle
@add_toggle_python @add_toggle_python
@snippet python/tutorial_code/core/BasicGeometricDrawing/basic_geometric_drawing.py my_polygon @snippet python/tutorial_code/imgProc/BasicGeometricDrawing/basic_geometric_drawing.py my_polygon
@end_toggle @end_toggle
- To draw a filled polygon we use the function **fillPoly()** . We note that: - To draw a filled polygon we use the function **fillPoly()** . We note that:
@ -235,15 +234,15 @@ Let's check what is inside each of these functions:
<H4>rectangle</H4> <H4>rectangle</H4>
@add_toggle_cpp @add_toggle_cpp
@snippet cpp/tutorial_code/core/Matrix/Drawing_1.cpp rectangle @snippet cpp/tutorial_code/ImgProc/basic_drawing/Drawing_1.cpp rectangle
@end_toggle @end_toggle
@add_toggle_java @add_toggle_java
@snippet java/tutorial_code/core/BasicGeometricDrawing/BasicGeometricDrawing.java rectangle @snippet java/tutorial_code/ImgProc/BasicGeometricDrawing/BasicGeometricDrawing.java rectangle
@end_toggle @end_toggle
@add_toggle_python @add_toggle_python
@snippet python/tutorial_code/core/BasicGeometricDrawing/basic_geometric_drawing.py rectangle @snippet python/tutorial_code/imgProc/BasicGeometricDrawing/basic_geometric_drawing.py rectangle
@end_toggle @end_toggle
- Finally we have the @ref cv::rectangle function (we did not create a special function for - Finally we have the @ref cv::rectangle function (we did not create a special function for

@ -1,6 +1,9 @@
Eroding and Dilating {#tutorial_erosion_dilatation} Eroding and Dilating {#tutorial_erosion_dilatation}
==================== ====================
@prev_tutorial{tutorial_gausian_median_blur_bilateral_filter}
@next_tutorial{tutorial_opening_closing_hats}
Goal Goal
---- ----

@ -1,6 +1,7 @@
Smoothing Images {#tutorial_gausian_median_blur_bilateral_filter} Smoothing Images {#tutorial_gausian_median_blur_bilateral_filter}
================ ================
@prev_tutorial{tutorial_random_generator_and_text}
@next_tutorial{tutorial_erosion_dilatation} @next_tutorial{tutorial_erosion_dilatation}
Goal Goal

@ -1,6 +1,9 @@
Back Projection {#tutorial_back_projection} Back Projection {#tutorial_back_projection}
=============== ===============
@prev_tutorial{tutorial_histogram_comparison}
@next_tutorial{tutorial_template_matching}
Goal Goal
---- ----

@ -1,6 +1,9 @@
Histogram Calculation {#tutorial_histogram_calculation} Histogram Calculation {#tutorial_histogram_calculation}
===================== =====================
@prev_tutorial{tutorial_histogram_equalization}
@next_tutorial{tutorial_histogram_comparison}
Goal Goal
---- ----

@ -1,6 +1,9 @@
Histogram Comparison {#tutorial_histogram_comparison} Histogram Comparison {#tutorial_histogram_comparison}
==================== ====================
@prev_tutorial{tutorial_histogram_calculation}
@next_tutorial{tutorial_back_projection}
Goal Goal
---- ----

@ -1,6 +1,9 @@
Histogram Equalization {#tutorial_histogram_equalization} Histogram Equalization {#tutorial_histogram_equalization}
====================== ======================
@prev_tutorial{tutorial_warp_affine}
@next_tutorial{tutorial_histogram_calculation}
Goal Goal
---- ----

@ -1,6 +1,9 @@
Canny Edge Detector {#tutorial_canny_detector} Canny Edge Detector {#tutorial_canny_detector}
=================== ===================
@prev_tutorial{tutorial_laplace_operator}
@next_tutorial{tutorial_hough_lines}
Goal Goal
---- ----

@ -1,6 +1,9 @@
Image Segmentation with Distance Transform and Watershed Algorithm {#tutorial_distance_transform} Image Segmentation with Distance Transform and Watershed Algorithm {#tutorial_distance_transform}
============= =============
@prev_tutorial{tutorial_point_polygon_test}
@next_tutorial{tutorial_out_of_focus_deblur_filter}
Goal Goal
---- ----

@ -1,6 +1,9 @@
Remapping {#tutorial_remap} Remapping {#tutorial_remap}
========= =========
@prev_tutorial{tutorial_hough_circle}
@next_tutorial{tutorial_warp_affine}
Goal Goal
---- ----

@ -1,6 +1,9 @@
Affine Transformations {#tutorial_warp_affine} Affine Transformations {#tutorial_warp_affine}
====================== ======================
@prev_tutorial{tutorial_remap}
@next_tutorial{tutorial_histogram_equalization}
Goal Goal
---- ----

@ -1,6 +1,9 @@
More Morphology Transformations {#tutorial_opening_closing_hats} More Morphology Transformations {#tutorial_opening_closing_hats}
=============================== ===============================
@prev_tutorial{tutorial_erosion_dilatation}
@next_tutorial{tutorial_hitOrMiss}
Goal Goal
---- ----

@ -1,6 +1,8 @@
Out-of-focus Deblur Filter {#tutorial_out_of_focus_deblur_filter} Out-of-focus Deblur Filter {#tutorial_out_of_focus_deblur_filter}
========================== ==========================
@prev_tutorial{tutorial_distance_transform}
Goal Goal
---- ----

@ -1,6 +1,9 @@
Random generator and text with OpenCV {#tutorial_random_generator_and_text} Random generator and text with OpenCV {#tutorial_random_generator_and_text}
===================================== =====================================
@prev_tutorial{tutorial_basic_geometric_drawing}
@next_tutorial{tutorial_gausian_median_blur_bilateral_filter}
Goals Goals
----- -----

@ -1,6 +1,9 @@
Creating Bounding boxes and circles for contours {#tutorial_bounding_rects_circles} Creating Bounding boxes and circles for contours {#tutorial_bounding_rects_circles}
================================================ ================================================
@prev_tutorial{tutorial_hull}
@next_tutorial{tutorial_bounding_rotated_ellipses}
Goal Goal
---- ----

@ -1,6 +1,9 @@
Creating Bounding rotated boxes and ellipses for contours {#tutorial_bounding_rotated_ellipses} Creating Bounding rotated boxes and ellipses for contours {#tutorial_bounding_rotated_ellipses}
========================================================= =========================================================
@prev_tutorial{tutorial_bounding_rects_circles}
@next_tutorial{tutorial_moments}
Goal Goal
---- ----

@ -1,6 +1,9 @@
Finding contours in your image {#tutorial_find_contours} Finding contours in your image {#tutorial_find_contours}
============================== ==============================
@prev_tutorial{tutorial_template_matching}
@next_tutorial{tutorial_hull}
Goal Goal
---- ----

@ -1,6 +1,9 @@
Convex Hull {#tutorial_hull} Convex Hull {#tutorial_hull}
=========== ===========
@prev_tutorial{tutorial_find_contours}
@next_tutorial{tutorial_bounding_rects_circles}
Goal Goal
---- ----

@ -1,6 +1,9 @@
Image Moments {#tutorial_moments} Image Moments {#tutorial_moments}
============= =============
@prev_tutorial{tutorial_bounding_rotated_ellipses}
@next_tutorial{tutorial_point_polygon_test}
Goal Goal
---- ----

@ -1,6 +1,9 @@
Point Polygon Test {#tutorial_point_polygon_test} Point Polygon Test {#tutorial_point_polygon_test}
================== ==================
@prev_tutorial{tutorial_moments}
@next_tutorial{tutorial_distance_transform}
Goal Goal
---- ----

@ -3,6 +3,24 @@ Image Processing (imgproc module) {#tutorial_table_of_content_imgproc}
In this section you will learn about the image processing (manipulation) functions inside OpenCV. In this section you will learn about the image processing (manipulation) functions inside OpenCV.
- @subpage tutorial_basic_geometric_drawing
*Languages:* C++, Java, Python
*Compatibility:* \> OpenCV 2.0
*Author:* Ana Huamán
We will learn how to draw simple geometry with OpenCV!
- @subpage tutorial_random_generator_and_text
*Compatibility:* \> OpenCV 2.0
*Author:* Ana Huamán
We will draw some *fancy-looking* stuff using OpenCV!
- @subpage tutorial_gausian_median_blur_bilateral_filter - @subpage tutorial_gausian_median_blur_bilateral_filter
*Languages:* C++, Java, Python *Languages:* C++, Java, Python

@ -1,6 +1,9 @@
Basic Thresholding Operations {#tutorial_threshold} Basic Thresholding Operations {#tutorial_threshold}
============================= =============================
@prev_tutorial{tutorial_pyramids}
@next_tutorial{tutorial_threshold_inRange}
Goal Goal
---- ----

@ -1,6 +1,9 @@
Thresholding Operations using inRange {#tutorial_threshold_inRange} Thresholding Operations using inRange {#tutorial_threshold_inRange}
===================================== =====================================
@prev_tutorial{tutorial_threshold}
@next_tutorial{tutorial_filter_2d}
Goal Goal
---- ----

@ -24,17 +24,7 @@ Explanation
The most important code part is: The most important code part is:
@code{.cpp} @snippet cpp/stitching.cpp stitching
Mat pano;
Ptr<Stitcher> stitcher = Stitcher::create(mode, try_use_gpu);
Stitcher::Status status = stitcher->stitch(imgs, pano);
if (status != Stitcher::OK)
{
cout << "Can't stitch images, error code = " << int(status) << endl;
return -1;
}
@endcode
A new instance of stitcher is created and the @ref cv::Stitcher::stitch will A new instance of stitcher is created and the @ref cv::Stitcher::stitch will
do all the hard work. do all the hard work.

@ -307,7 +307,7 @@ optimization procedures like calibrateCamera, stereoCalibrate, or solvePnP .
*/ */
CV_EXPORTS_W void Rodrigues( InputArray src, OutputArray dst, OutputArray jacobian = noArray() ); CV_EXPORTS_W void Rodrigues( InputArray src, OutputArray dst, OutputArray jacobian = noArray() );
/** @example pose_from_homography.cpp /** @example samples/cpp/tutorial_code/features2D/Homography/pose_from_homography.cpp
An example program about pose estimation from coplanar points An example program about pose estimation from coplanar points
Check @ref tutorial_homography "the corresponding tutorial" for more details Check @ref tutorial_homography "the corresponding tutorial" for more details
@ -526,7 +526,7 @@ CV_EXPORTS_W void projectPoints( InputArray objectPoints,
OutputArray jacobian = noArray(), OutputArray jacobian = noArray(),
double aspectRatio = 0 ); double aspectRatio = 0 );
/** @example homography_from_camera_displacement.cpp /** @example samples/cpp/tutorial_code/features2D/Homography/homography_from_camera_displacement.cpp
An example program about homography from the camera displacement An example program about homography from the camera displacement
Check @ref tutorial_homography "the corresponding tutorial" for more details Check @ref tutorial_homography "the corresponding tutorial" for more details
@ -1966,7 +1966,7 @@ CV_EXPORTS_W cv::Mat estimateAffinePartial2D(InputArray from, InputArray to, Out
size_t maxIters = 2000, double confidence = 0.99, size_t maxIters = 2000, double confidence = 0.99,
size_t refineIters = 10); size_t refineIters = 10);
/** @example decompose_homography.cpp /** @example samples/cpp/tutorial_code/features2D/Homography/decompose_homography.cpp
An example program with homography decomposition. An example program with homography decomposition.
Check @ref tutorial_homography "the corresponding tutorial" for more details. Check @ref tutorial_homography "the corresponding tutorial" for more details.

@ -273,9 +273,11 @@ of p and len.
*/ */
CV_EXPORTS_W int borderInterpolate(int p, int len, int borderType); CV_EXPORTS_W int borderInterpolate(int p, int len, int borderType);
/** @example copyMakeBorder_demo.cpp /** @example samples/cpp/tutorial_code/ImgTrans/copyMakeBorder_demo.cpp
An example using copyMakeBorder function An example using copyMakeBorder function.
Check @ref tutorial_copyMakeBorder "the corresponding tutorial" for more details
*/ */
/** @brief Forms a border around an image. /** @brief Forms a border around an image.
The function copies the source image into the middle of the destination image. The areas to the The function copies the source image into the middle of the destination image. The areas to the
@ -474,9 +476,10 @@ The function can also be emulated with a matrix expression, for example:
*/ */
CV_EXPORTS_W void scaleAdd(InputArray src1, double alpha, InputArray src2, OutputArray dst); CV_EXPORTS_W void scaleAdd(InputArray src1, double alpha, InputArray src2, OutputArray dst);
/** @example AddingImagesTrackbar.cpp /** @example samples/cpp/tutorial_code/HighGUI/AddingImagesTrackbar.cpp
Check @ref tutorial_trackbar "the corresponding tutorial" for more details
*/ */
/** @brief Calculates the weighted sum of two arrays. /** @brief Calculates the weighted sum of two arrays.
The function addWeighted calculates the weighted sum of two arrays as follows: The function addWeighted calculates the weighted sum of two arrays as follows:
@ -2527,10 +2530,14 @@ public:
Mat mean; //!< mean value subtracted before the projection and added after the back projection Mat mean; //!< mean value subtracted before the projection and added after the back projection
}; };
/** @example pca.cpp /** @example samples/cpp/pca.cpp
An example using %PCA for dimensionality reduction while maintaining an amount of variance An example using %PCA for dimensionality reduction while maintaining an amount of variance
*/ */
/** @example samples/cpp/tutorial_code/ml/introduction_to_pca/introduction_to_pca.cpp
Check @ref tutorial_introduction_to_pca "the corresponding tutorial" for more details
*/
/** /**
@brief Linear Discriminant Analysis @brief Linear Discriminant Analysis
@todo document this class @todo document this class
@ -2930,17 +2937,11 @@ public:
unsigned operator ()(unsigned N); unsigned operator ()(unsigned N);
unsigned operator ()(); unsigned operator ()();
/** @brief returns uniformly distributed integer random number from [a,b) range /** @brief returns uniformly distributed integer random number from [a,b) range*/
*/
int uniform(int a, int b); int uniform(int a, int b);
/** @brief returns uniformly distributed floating-point random number from [a,b) range /** @brief returns uniformly distributed floating-point random number from [a,b) range*/
*/
float uniform(float a, float b); float uniform(float a, float b);
/** @brief returns uniformly distributed double-precision floating-point random number from [a,b) range /** @brief returns uniformly distributed double-precision floating-point random number from [a,b) range*/
*/
double uniform(double a, double b); double uniform(double a, double b);
private: private:
@ -2954,7 +2955,7 @@ private:
//! @addtogroup core_cluster //! @addtogroup core_cluster
//! @{ //! @{
/** @example kmeans.cpp /** @example samples/cpp/kmeans.cpp
An example on K-means clustering An example on K-means clustering
*/ */

@ -575,7 +575,7 @@ protected:
MatStep& operator = (const MatStep&); MatStep& operator = (const MatStep&);
}; };
/** @example cout_mat.cpp /** @example samples/cpp/cout_mat.cpp
An example demonstrating the serial out capabilities of cv::Mat An example demonstrating the serial out capabilities of cv::Mat
*/ */

@ -287,12 +287,12 @@ element is a structure of 2 integers, followed by a single-precision floating-po
equivalent notations of the above specification are `iif`, `2i1f` and so forth. Other examples: `u` equivalent notations of the above specification are `iif`, `2i1f` and so forth. Other examples: `u`
means that the array consists of bytes, and `2d` means the array consists of pairs of doubles. means that the array consists of bytes, and `2d` means the array consists of pairs of doubles.
@see @ref filestorage.cpp @see @ref samples/cpp/filestorage.cpp
*/ */
//! @{ //! @{
/** @example filestorage.cpp /** @example samples/cpp/filestorage.cpp
A complete example using the FileStorage interface A complete example using the FileStorage interface
*/ */

@ -59,6 +59,20 @@
A network training is in principle not supported. A network training is in principle not supported.
@} @}
*/ */
/** @example samples/dnn/classification.cpp
Check @ref tutorial_dnn_googlenet "the corresponding tutorial" for more details
*/
/** @example samples/dnn/colorization.cpp
*/
/** @example samples/dnn/object_detection.cpp
Check @ref tutorial_dnn_yolo "the corresponding tutorial" for more details
*/
/** @example samples/dnn/openpose.cpp
*/
/** @example samples/dnn/segmentation.cpp
*/
/** @example samples/dnn/text_detection.cpp
*/
#include <opencv2/dnn/dnn.hpp> #include <opencv2/dnn/dnn.hpp>
#endif /* OPENCV_DNN_HPP */ #endif /* OPENCV_DNN_HPP */

@ -452,12 +452,13 @@ The function getWindowImageRect returns the client screen coordinates, width and
*/ */
CV_EXPORTS_W Rect getWindowImageRect(const String& winname); CV_EXPORTS_W Rect getWindowImageRect(const String& winname);
/** @example samples/cpp/create_mask.cpp
This program demonstrates using mouse events and how to make and use a mask image (black and white) .
*/
/** @brief Sets mouse handler for the specified window /** @brief Sets mouse handler for the specified window
@param winname Name of the window. @param winname Name of the window.
@param onMouse Mouse callback. See OpenCV samples, such as @param onMouse Callback function for mouse events. See OpenCV samples on how to specify and use the callback.
<https://github.com/opencv/opencv/tree/3.4/samples/cpp/ffilldemo.cpp>, on how to specify and
use the callback.
@param userdata The optional parameter passed to the callback. @param userdata The optional parameter passed to the callback.
*/ */
CV_EXPORTS void setMouseCallback(const String& winname, MouseCallback onMouse, void* userdata = 0); CV_EXPORTS void setMouseCallback(const String& winname, MouseCallback onMouse, void* userdata = 0);

@ -1191,7 +1191,7 @@ protected:
//! @addtogroup imgproc_feature //! @addtogroup imgproc_feature
//! @{ //! @{
/** @example lsd_lines.cpp /** @example samples/cpp/lsd_lines.cpp
An example using the LineSegmentDetector An example using the LineSegmentDetector
\image html building_lsd.png "Sample output image" width=434 height=300 \image html building_lsd.png "Sample output image" width=434 height=300
*/ */
@ -1349,11 +1349,12 @@ operation is shifted.
*/ */
CV_EXPORTS_W Mat getStructuringElement(int shape, Size ksize, Point anchor = Point(-1,-1)); CV_EXPORTS_W Mat getStructuringElement(int shape, Size ksize, Point anchor = Point(-1,-1));
/** @example Smoothing.cpp /** @example samples/cpp/tutorial_code/ImgProc/Smoothing/Smoothing.cpp
Sample code for simple filters Sample code for simple filters
![Sample screenshot](Smoothing_Tutorial_Result_Median_Filter.jpg) ![Sample screenshot](Smoothing_Tutorial_Result_Median_Filter.jpg)
Check @ref tutorial_gausian_median_blur_bilateral_filter "the corresponding tutorial" for more details Check @ref tutorial_gausian_median_blur_bilateral_filter "the corresponding tutorial" for more details
*/ */
/** @brief Blurs an image using the median filter. /** @brief Blurs an image using the median filter.
The function smoothes an image using the median filter with the \f$\texttt{ksize} \times The function smoothes an image using the median filter with the \f$\texttt{ksize} \times
@ -1556,11 +1557,12 @@ CV_EXPORTS_W void sepFilter2D( InputArray src, OutputArray dst, int ddepth,
Point anchor = Point(-1,-1), Point anchor = Point(-1,-1),
double delta = 0, int borderType = BORDER_DEFAULT ); double delta = 0, int borderType = BORDER_DEFAULT );
/** @example Sobel_Demo.cpp /** @example samples/cpp/tutorial_code/ImgTrans/Sobel_Demo.cpp
Sample code using Sobel and/or Scharr OpenCV functions to make a simple Edge Detector Sample code using Sobel and/or Scharr OpenCV functions to make a simple Edge Detector
![Sample screenshot](Sobel_Derivatives_Tutorial_Result.jpg) ![Sample screenshot](Sobel_Derivatives_Tutorial_Result.jpg)
Check @ref tutorial_sobel_derivatives "the corresponding tutorial" for more details Check @ref tutorial_sobel_derivatives "the corresponding tutorial" for more details
*/ */
/** @brief Calculates the first, second, third, or mixed image derivatives using an extended Sobel operator. /** @brief Calculates the first, second, third, or mixed image derivatives using an extended Sobel operator.
In all cases except one, the \f$\texttt{ksize} \times \texttt{ksize}\f$ separable kernel is used to In all cases except one, the \f$\texttt{ksize} \times \texttt{ksize}\f$ separable kernel is used to
@ -1656,7 +1658,7 @@ CV_EXPORTS_W void Scharr( InputArray src, OutputArray dst, int ddepth,
int dx, int dy, double scale = 1, double delta = 0, int dx, int dy, double scale = 1, double delta = 0,
int borderType = BORDER_DEFAULT ); int borderType = BORDER_DEFAULT );
/** @example laplace.cpp /** @example samples/cpp/laplace.cpp
An example using Laplace transformations for edge detection An example using Laplace transformations for edge detection
*/ */
@ -1692,7 +1694,7 @@ CV_EXPORTS_W void Laplacian( InputArray src, OutputArray dst, int ddepth,
//! @addtogroup imgproc_feature //! @addtogroup imgproc_feature
//! @{ //! @{
/** @example edge.cpp /** @example samples/cpp/edge.cpp
This program demonstrates usage of the Canny edge detector This program demonstrates usage of the Canny edge detector
Check @ref tutorial_canny_detector "the corresponding tutorial" for more details Check @ref tutorial_canny_detector "the corresponding tutorial" for more details
@ -1932,7 +1934,7 @@ CV_EXPORTS_W void goodFeaturesToTrack( InputArray image, OutputArray corners,
InputArray mask, int blockSize, InputArray mask, int blockSize,
int gradientSize, bool useHarrisDetector = false, int gradientSize, bool useHarrisDetector = false,
double k = 0.04 ); double k = 0.04 );
/** @example houghlines.cpp /** @example samples/cpp/tutorial_code/ImgTrans/houghlines.cpp
An example using the Hough line detector An example using the Hough line detector
![Sample input image](Hough_Lines_Tutorial_Original_Image.jpg) ![Output image](Hough_Lines_Tutorial_Result.jpg) ![Sample input image](Hough_Lines_Tutorial_Original_Image.jpg) ![Output image](Hough_Lines_Tutorial_Result.jpg)
*/ */
@ -2021,7 +2023,7 @@ CV_EXPORTS_W void HoughLinesPointSet( InputArray _point, OutputArray _lines, int
double min_rho, double max_rho, double rho_step, double min_rho, double max_rho, double rho_step,
double min_theta, double max_theta, double theta_step ); double min_theta, double max_theta, double theta_step );
/** @example houghcircles.cpp /** @example samples/cpp/tutorial_code/ImgTrans/houghcircles.cpp
An example using the Hough circle detector An example using the Hough circle detector
*/ */
@ -2069,7 +2071,7 @@ CV_EXPORTS_W void HoughCircles( InputArray image, OutputArray circles,
//! @addtogroup imgproc_filter //! @addtogroup imgproc_filter
//! @{ //! @{
/** @example morphology2.cpp /** @example samples/cpp/tutorial_code/ImgProc/Morphology_2.cpp
Advanced morphology Transformations sample code Advanced morphology Transformations sample code
![Sample screenshot](Morphology_2_Tutorial_Result.jpg) ![Sample screenshot](Morphology_2_Tutorial_Result.jpg)
Check @ref tutorial_opening_closing_hats "the corresponding tutorial" for more details Check @ref tutorial_opening_closing_hats "the corresponding tutorial" for more details
@ -2102,11 +2104,12 @@ CV_EXPORTS_W void erode( InputArray src, OutputArray dst, InputArray kernel,
int borderType = BORDER_CONSTANT, int borderType = BORDER_CONSTANT,
const Scalar& borderValue = morphologyDefaultBorderValue() ); const Scalar& borderValue = morphologyDefaultBorderValue() );
/** @example Morphology_1.cpp /** @example samples/cpp/tutorial_code/ImgProc/Morphology_1.cpp
Erosion and Dilation sample code Erosion and Dilation sample code
![Sample Screenshot-Erosion](Morphology_1_Tutorial_Erosion_Result.jpg)![Sample Screenshot-Dilation](Morphology_1_Tutorial_Dilation_Result.jpg) ![Sample Screenshot-Erosion](Morphology_1_Tutorial_Erosion_Result.jpg)![Sample Screenshot-Dilation](Morphology_1_Tutorial_Dilation_Result.jpg)
Check @ref tutorial_erosion_dilatation "the corresponding tutorial" for more details Check @ref tutorial_erosion_dilatation "the corresponding tutorial" for more details
*/ */
/** @brief Dilates an image by using a specific structuring element. /** @brief Dilates an image by using a specific structuring element.
The function dilates the source image using the specified structuring element that determines the The function dilates the source image using the specified structuring element that determines the
@ -2236,9 +2239,10 @@ CV_EXPORTS_W void warpAffine( InputArray src, OutputArray dst,
int borderMode = BORDER_CONSTANT, int borderMode = BORDER_CONSTANT,
const Scalar& borderValue = Scalar()); const Scalar& borderValue = Scalar());
/** @example warpPerspective_demo.cpp /** @example samples/cpp/warpPerspective_demo.cpp
An example program shows using cv::findHomography and cv::warpPerspective for image warping An example program shows using cv::findHomography and cv::warpPerspective for image warping
*/ */
/** @brief Applies a perspective transformation to an image. /** @brief Applies a perspective transformation to an image.
The function warpPerspective transforms the source image using the specified matrix: The function warpPerspective transforms the source image using the specified matrix:
@ -2434,7 +2438,7 @@ source image. The center must be inside the image.
CV_EXPORTS_W void getRectSubPix( InputArray image, Size patchSize, CV_EXPORTS_W void getRectSubPix( InputArray image, Size patchSize,
Point2f center, OutputArray patch, int patchType = -1 ); Point2f center, OutputArray patch, int patchType = -1 );
/** @example polar_transforms.cpp /** @example samples/cpp/polar_transforms.cpp
An example using the cv::linearPolar and cv::logPolar operations An example using the cv::linearPolar and cv::logPolar operations
*/ */
@ -2869,9 +2873,10 @@ CV_EXPORTS_W void adaptiveThreshold( InputArray src, OutputArray dst,
//! @addtogroup imgproc_filter //! @addtogroup imgproc_filter
//! @{ //! @{
/** @example Pyramids.cpp /** @example samples/cpp/tutorial_code/ImgProc/Pyramids/Pyramids.cpp
An example using pyrDown and pyrUp functions An example using pyrDown and pyrUp functions
*/ */
/** @brief Blurs an image and downsamples it. /** @brief Blurs an image and downsamples it.
By default, size of the output image is computed as `Size((src.cols+1)/2, (src.rows+1)/2)`, but in By default, size of the output image is computed as `Size((src.cols+1)/2, (src.rows+1)/2)`, but in
@ -3120,7 +3125,7 @@ CV_EXPORTS_AS(undistortPointsIter) void undistortPoints( InputArray src, OutputA
//! @addtogroup imgproc_hist //! @addtogroup imgproc_hist
//! @{ //! @{
/** @example demhist.cpp /** @example samples/cpp/demhist.cpp
An example for creating histograms of an image An example for creating histograms of an image
*/ */
@ -3317,7 +3322,7 @@ CV_EXPORTS_AS(EMD) float wrapperEMD( InputArray signature1, InputArray signature
//! @} imgproc_hist //! @} imgproc_hist
/** @example watershed.cpp /** @example samples/cpp/watershed.cpp
An example using the watershed algorithm An example using the watershed algorithm
*/ */
@ -3397,7 +3402,7 @@ CV_EXPORTS_W void pyrMeanShiftFiltering( InputArray src, OutputArray dst,
//! @addtogroup imgproc_misc //! @addtogroup imgproc_misc
//! @{ //! @{
/** @example grabcut.cpp /** @example samples/cpp/grabcut.cpp
An example using the GrabCut algorithm An example using the GrabCut algorithm
![Sample Screenshot](grabcut_output1.jpg) ![Sample Screenshot](grabcut_output1.jpg)
*/ */
@ -3424,11 +3429,10 @@ CV_EXPORTS_W void grabCut( InputArray img, InputOutputArray mask, Rect rect,
InputOutputArray bgdModel, InputOutputArray fgdModel, InputOutputArray bgdModel, InputOutputArray fgdModel,
int iterCount, int mode = GC_EVAL ); int iterCount, int mode = GC_EVAL );
/** @example distrans.cpp /** @example samples/cpp/distrans.cpp
An example on using the distance transform\ An example on using the distance transform
*/ */
/** @brief Calculates the distance to the closest zero pixel for each pixel of the source image. /** @brief Calculates the distance to the closest zero pixel for each pixel of the source image.
The function cv::distanceTransform calculates the approximate or precise distance from every binary The function cv::distanceTransform calculates the approximate or precise distance from every binary
@ -3500,7 +3504,7 @@ the first variant of the function and distanceType == #DIST_L1.
CV_EXPORTS_W void distanceTransform( InputArray src, OutputArray dst, CV_EXPORTS_W void distanceTransform( InputArray src, OutputArray dst,
int distanceType, int maskSize, int dstType=CV_32F); int distanceType, int maskSize, int dstType=CV_32F);
/** @example ffilldemo.cpp /** @example samples/cpp/ffilldemo.cpp
An example using the FloodFill technique An example using the FloodFill technique
*/ */
@ -3701,9 +3705,10 @@ enum TemplateMatchModes {
TM_CCOEFF_NORMED = 5 //!< \f[R(x,y)= \frac{ \sum_{x',y'} (T'(x',y') \cdot I'(x+x',y+y')) }{ \sqrt{\sum_{x',y'}T'(x',y')^2 \cdot \sum_{x',y'} I'(x+x',y+y')^2} }\f] TM_CCOEFF_NORMED = 5 //!< \f[R(x,y)= \frac{ \sum_{x',y'} (T'(x',y') \cdot I'(x+x',y+y')) }{ \sqrt{\sum_{x',y'}T'(x',y')^2 \cdot \sum_{x',y'} I'(x+x',y+y')^2} }\f]
}; };
/** @example MatchTemplate_Demo.cpp /** @example samples/cpp/tutorial_code/Histograms_Matching/MatchTemplate_Demo.cpp
An example using Template Matching algorithm An example using Template Matching algorithm
*/ */
/** @brief Compares a template against overlapped image regions. /** @brief Compares a template against overlapped image regions.
The function slides through image , compares the overlapped patches of size \f$w \times h\f$ against The function slides through image , compares the overlapped patches of size \f$w \times h\f$ against
@ -3735,6 +3740,10 @@ CV_EXPORTS_W void matchTemplate( InputArray image, InputArray templ,
//! @addtogroup imgproc_shape //! @addtogroup imgproc_shape
//! @{ //! @{
/** @example samples/cpp/connected_components.cpp
This program demonstrates connected components and use of the trackbar
*/
/** @brief computes the connected components labeled image of boolean image /** @brief computes the connected components labeled image of boolean image
image with 4 or 8 way connectivity - returns N, the total number of labels [0, N-1] where 0 image with 4 or 8 way connectivity - returns N, the total number of labels [0, N-1] where 0
@ -3842,6 +3851,16 @@ CV_EXPORTS_W void findContours( InputOutputArray image, OutputArrayOfArrays cont
CV_EXPORTS void findContours( InputOutputArray image, OutputArrayOfArrays contours, CV_EXPORTS void findContours( InputOutputArray image, OutputArrayOfArrays contours,
int mode, int method, Point offset = Point()); int mode, int method, Point offset = Point());
/** @example samples/cpp/squares.cpp
A program using pyramid scaling, Canny, contours and contour simplification to find
squares in a list of images (pic1-6.png). Returns sequence of squares detected on the image.
*/
/** @example samples/tapi/squares.cpp
A program using pyramid scaling, Canny, contours and contour simplification to find
squares in the input image.
*/
/** @brief Approximates a polygonal curve(s) with the specified precision. /** @brief Approximates a polygonal curve(s) with the specified precision.
The function cv::approxPolyDP approximates a curve or a polygon with another curve/polygon with less The function cv::approxPolyDP approximates a curve or a polygon with another curve/polygon with less
@ -3940,7 +3959,7 @@ The function finds the minimal enclosing circle of a 2D point set using an itera
CV_EXPORTS_W void minEnclosingCircle( InputArray points, CV_EXPORTS_W void minEnclosingCircle( InputArray points,
CV_OUT Point2f& center, CV_OUT float& radius ); CV_OUT Point2f& center, CV_OUT float& radius );
/** @example minarea.cpp /** @example samples/cpp/minarea.cpp
*/ */
/** @brief Finds a triangle of minimum area enclosing a 2D point set and returns its area. /** @brief Finds a triangle of minimum area enclosing a 2D point set and returns its area.
@ -3976,7 +3995,7 @@ The function compares two shapes. All three implemented methods use the Hu invar
CV_EXPORTS_W double matchShapes( InputArray contour1, InputArray contour2, CV_EXPORTS_W double matchShapes( InputArray contour1, InputArray contour2,
int method, double parameter ); int method, double parameter );
/** @example convexhull.cpp /** @example samples/cpp/convexhull.cpp
An example using the convexHull functionality An example using the convexHull functionality
*/ */
@ -4036,7 +4055,7 @@ CV_EXPORTS_W bool isContourConvex( InputArray contour );
CV_EXPORTS_W float intersectConvexConvex( InputArray _p1, InputArray _p2, CV_EXPORTS_W float intersectConvexConvex( InputArray _p1, InputArray _p2,
OutputArray _p12, bool handleNested = true ); OutputArray _p12, bool handleNested = true );
/** @example fitellipse.cpp /** @example samples/cpp/fitellipse.cpp
An example using the fitEllipse technique An example using the fitEllipse technique
*/ */
@ -4253,9 +4272,10 @@ enum ColormapTypes
COLORMAP_PARULA = 12 //!< ![parula](pics/colormaps/colorscale_parula.jpg) COLORMAP_PARULA = 12 //!< ![parula](pics/colormaps/colorscale_parula.jpg)
}; };
/** @example falsecolor.cpp /** @example samples/cpp/falsecolor.cpp
An example using applyColorMap function An example using applyColorMap function
*/ */
/** @brief Applies a GNU Octave/MATLAB equivalent colormap on a given image. /** @brief Applies a GNU Octave/MATLAB equivalent colormap on a given image.
@param src The source image, grayscale or colored of type CV_8UC1 or CV_8UC3. @param src The source image, grayscale or colored of type CV_8UC1 or CV_8UC3.
@ -4342,9 +4362,10 @@ CV_EXPORTS void rectangle(CV_IN_OUT Mat& img, Rect rec,
const Scalar& color, int thickness = 1, const Scalar& color, int thickness = 1,
int lineType = LINE_8, int shift = 0); int lineType = LINE_8, int shift = 0);
/** @example Drawing_2.cpp /** @example samples/cpp/tutorial_code/ImgProc/basic_drawing/Drawing_2.cpp
An example using drawing functions An example using drawing functions
*/ */
/** @brief Draws a circle. /** @brief Draws a circle.
The function cv::circle draws a simple or filled circle with a given center and radius. The function cv::circle draws a simple or filled circle with a given center and radius.
@ -4468,9 +4489,11 @@ CV_EXPORTS void fillPoly(Mat& img, const Point** pts,
const Scalar& color, int lineType = LINE_8, int shift = 0, const Scalar& color, int lineType = LINE_8, int shift = 0,
Point offset = Point() ); Point offset = Point() );
/** @example Drawing_1.cpp /** @example samples/cpp/tutorial_code/ImgProc/basic_drawing/Drawing_1.cpp
An example using drawing functions An example using drawing functions
Check @ref tutorial_random_generator_and_text "the corresponding tutorial" for more details
*/ */
/** @brief Fills the area bounded by one or more polygons. /** @brief Fills the area bounded by one or more polygons.
The function cv::fillPoly fills an area bounded by several polygonal contours. The function can fill The function cv::fillPoly fills an area bounded by several polygonal contours. The function can fill
@ -4510,12 +4533,12 @@ CV_EXPORTS_W void polylines(InputOutputArray img, InputArrayOfArrays pts,
bool isClosed, const Scalar& color, bool isClosed, const Scalar& color,
int thickness = 1, int lineType = LINE_8, int shift = 0 ); int thickness = 1, int lineType = LINE_8, int shift = 0 );
/** @example contours2.cpp /** @example samples/cpp/contours2.cpp
An example program illustrates the use of cv::findContours and cv::drawContours An example program illustrates the use of cv::findContours and cv::drawContours
\image html WindowsQtContoursOutput.png "Screenshot of the program" \image html WindowsQtContoursOutput.png "Screenshot of the program"
*/ */
/** @example segment_objects.cpp /** @example samples/cpp/segment_objects.cpp
An example using drawContours to clean up a background segmentation result An example using drawContours to clean up a background segmentation result
*/ */

@ -215,7 +215,7 @@ public:
virtual Ptr<MaskGenerator> getMaskGenerator() = 0; virtual Ptr<MaskGenerator> getMaskGenerator() = 0;
}; };
/** @example facedetect.cpp /** @example samples/cpp/facedetect.cpp
This program demonstrates usage of the Cascade classifier class This program demonstrates usage of the Cascade classifier class
\image html Cascade_Classifier_Tutorial_Result_Haar.jpg "Sample screenshot" width=321 height=254 \image html Cascade_Classifier_Tutorial_Result_Haar.jpg "Sample screenshot" width=321 height=254
*/ */
@ -443,7 +443,7 @@ public:
*/ */
CV_WRAP double getWinSigma() const; CV_WRAP double getWinSigma() const;
/**@example peopledetect.cpp /**@example samples/cpp/peopledetect.cpp
*/ */
/**@brief Sets coefficients for the linear SVM classifier. /**@brief Sets coefficients for the linear SVM classifier.
@param _svmdetector coefficients for the linear SVM classifier. @param _svmdetector coefficients for the linear SVM classifier.
@ -478,7 +478,7 @@ public:
*/ */
virtual void copyTo(HOGDescriptor& c) const; virtual void copyTo(HOGDescriptor& c) const;
/**@example train_HOG.cpp /**@example samples/cpp/train_HOG.cpp
*/ */
/** @brief Computes HOG descriptors of given image. /** @brief Computes HOG descriptors of given image.
@param img Matrix of the type CV_8U containing an image where HOG features will be calculated. @param img Matrix of the type CV_8U containing an image where HOG features will be calculated.
@ -575,7 +575,7 @@ public:
*/ */
CV_WRAP static std::vector<float> getDefaultPeopleDetector(); CV_WRAP static std::vector<float> getDefaultPeopleDetector();
/**@example hog.cpp /**@example samples/tapi/hog.cpp
*/ */
/** @brief Returns coefficients of the classifier trained for people detection (for 48x96 windows). /** @brief Returns coefficients of the classifier trained for people detection (for 48x96 windows).
*/ */

@ -730,7 +730,7 @@ CV_EXPORTS_W void decolor( InputArray src, OutputArray grayscale, OutputArray co
//! @addtogroup photo_clone //! @addtogroup photo_clone
//! @{ //! @{
/** @example cloning_demo.cpp /** @example samples/cpp/tutorial_code/photo/seamless_cloning/cloning_demo.cpp
An example using seamlessClone function An example using seamlessClone function
*/ */
/** @brief Image editing tasks concern either global changes (color/intensity corrections, filters, /** @brief Image editing tasks concern either global changes (color/intensity corrections, filters,
@ -836,7 +836,7 @@ CV_EXPORTS_W void edgePreservingFilter(InputArray src, OutputArray dst, int flag
CV_EXPORTS_W void detailEnhance(InputArray src, OutputArray dst, float sigma_s = 10, CV_EXPORTS_W void detailEnhance(InputArray src, OutputArray dst, float sigma_s = 10,
float sigma_r = 0.15f); float sigma_r = 0.15f);
/** @example npr_demo.cpp /** @example samples/cpp/tutorial_code/photo/non_photorealistic_rendering/npr_demo.cpp
An example using non-photorealistic line drawing functions An example using non-photorealistic line drawing functions
*/ */
/** @brief Pencil-like non-photorealistic line drawing /** @brief Pencil-like non-photorealistic line drawing

@ -53,7 +53,7 @@ namespace cv
//! @addtogroup shape //! @addtogroup shape
//! @{ //! @{
/** @example shape_example.cpp /** @example samples/cpp/shape_example.cpp
An example using shape distance algorithm An example using shape distance algorithm
*/ */
/** @brief Abstract base class for shape distance algorithms. /** @brief Abstract base class for shape distance algorithms.

@ -109,6 +109,14 @@ namespace cv {
//! @addtogroup stitching //! @addtogroup stitching
//! @{ //! @{
/** @example samples/cpp/stitching.cpp
A basic example on image stitching
*/
/** @example samples/cpp/stitching_detailed.cpp
A detailed example on image stitching
*/
/** @brief High level image stitcher. /** @brief High level image stitcher.
It's possible to use this class without being aware of the entire stitching pipeline. However, to It's possible to use this class without being aware of the entire stitching pipeline. However, to

@ -78,9 +78,10 @@ See the OpenCV sample camshiftdemo.c that tracks colored objects.
*/ */
CV_EXPORTS_W RotatedRect CamShift( InputArray probImage, CV_IN_OUT Rect& window, CV_EXPORTS_W RotatedRect CamShift( InputArray probImage, CV_IN_OUT Rect& window,
TermCriteria criteria ); TermCriteria criteria );
/** @example camshiftdemo.cpp /** @example samples/cpp/camshiftdemo.cpp
An example using the mean-shift tracking algorithm An example using the mean-shift tracking algorithm
*/ */
/** @brief Finds an object on a back projection image. /** @brief Finds an object on a back projection image.
@param probImage Back projection of the object histogram. See calcBackProject for details. @param probImage Back projection of the object histogram. See calcBackProject for details.
@ -123,9 +124,10 @@ CV_EXPORTS_W int buildOpticalFlowPyramid( InputArray img, OutputArrayOfArrays py
int derivBorder = BORDER_CONSTANT, int derivBorder = BORDER_CONSTANT,
bool tryReuseInputImage = true ); bool tryReuseInputImage = true );
/** @example lkdemo.cpp /** @example samples/cpp/lkdemo.cpp
An example using the Lucas-Kanade optical flow algorithm An example using the Lucas-Kanade optical flow algorithm
*/ */
/** @brief Calculates an optical flow for a sparse feature set using the iterative Lucas-Kanade method with /** @brief Calculates an optical flow for a sparse feature set using the iterative Lucas-Kanade method with
pyramids. pyramids.
@ -263,7 +265,7 @@ enum
MOTION_HOMOGRAPHY = 3 MOTION_HOMOGRAPHY = 3
}; };
/** @example image_alignment.cpp /** @example samples/cpp/image_alignment.cpp
An example using the image alignment ECC algorithm An example using the image alignment ECC algorithm
*/ */
@ -322,9 +324,10 @@ CV_EXPORTS_W double findTransformECC( InputArray templateImage, InputArray input
TermCriteria criteria = TermCriteria(TermCriteria::COUNT+TermCriteria::EPS, 50, 0.001), TermCriteria criteria = TermCriteria(TermCriteria::COUNT+TermCriteria::EPS, 50, 0.001),
InputArray inputMask = noArray()); InputArray inputMask = noArray());
/** @example kalman.cpp /** @example samples/cpp/kalman.cpp
An example using the standard Kalman filter An example using the standard Kalman filter
*/ */
/** @brief Kalman filter class. /** @brief Kalman filter class.
The class implements a standard Kalman filter <http://en.wikipedia.org/wiki/Kalman_filter>, The class implements a standard Kalman filter <http://en.wikipedia.org/wiki/Kalman_filter>,

@ -815,9 +815,14 @@ protected:
class IVideoWriter; class IVideoWriter;
/** @example videowriter_basic.cpp /** @example samples/cpp/tutorial_code/videoio/video-write/video-write.cpp
Check @ref tutorial_video_write "the corresponding tutorial" for more details
*/
/** @example samples/cpp/videowriter_basic.cpp
An example using VideoCapture and VideoWriter class An example using VideoCapture and VideoWriter class
*/ */
/** @brief Video writer class. /** @brief Video writer class.
The class provides C++ API for writing video files or image sequences. The class provides C++ API for writing video files or image sequences.

@ -1,3 +1,4 @@
#include <opencv2/core/utility.hpp> #include <opencv2/core/utility.hpp>
#include "opencv2/imgproc.hpp" #include "opencv2/imgproc.hpp"
#include "opencv2/imgcodecs.hpp" #include "opencv2/imgcodecs.hpp"
@ -32,44 +33,29 @@ static void on_trackbar(int, void*)
imshow( "Connected Components", dst ); imshow( "Connected Components", dst );
} }
static void help() int main( int argc, const char** argv )
{ {
cout << "\n This program demonstrates connected components and use of the trackbar\n" CommandLineParser parser(argc, argv, "{@image|../data/stuff.jpg|image for converting to a grayscale}");
"Usage: \n" parser.about("\nThis program demonstrates connected components and use of the trackbar\n");
" ./connected_components <image(../data/stuff.jpg as default)>\n" parser.printMessage();
"The image is converted to grayscale and displayed, another image has a trackbar\n" cout << "\nThe image is converted to grayscale and displayed, another image has a trackbar\n"
"that controls thresholding and thereby the extracted contours which are drawn in color\n"; "that controls thresholding and thereby the extracted contours which are drawn in color\n";
}
const char* keys =
{
"{help h||}{@image|../data/stuff.jpg|image for converting to a grayscale}"
};
int main( int argc, const char** argv ) String inputImage = parser.get<string>(0);
{ img = imread(inputImage, IMREAD_GRAYSCALE);
CommandLineParser parser(argc, argv, keys);
if (parser.has("help"))
{
help();
return 0;
}
string inputImage = parser.get<string>(0);
img = imread(inputImage.c_str(), 0);
if(img.empty()) if(img.empty())
{ {
cout << "Could not read input image file: " << inputImage << endl; cout << "Could not read input image file: " << inputImage << endl;
return -1; return EXIT_FAILURE;
} }
namedWindow( "Image", 1 );
imshow( "Image", img ); imshow( "Image", img );
namedWindow( "Connected Components", 1 ); namedWindow( "Connected Components", WINDOW_AUTOSIZE);
createTrackbar( "Threshold", "Connected Components", &threshval, 255, on_trackbar ); createTrackbar( "Threshold", "Connected Components", &threshval, 255, on_trackbar );
on_trackbar(threshval, 0); on_trackbar(threshval, 0);
waitKey(0); waitKey(0);
return 0; return EXIT_SUCCESS;
} }

@ -1,3 +1,4 @@
// The "Square Detector" program. // The "Square Detector" program.
// It loads several images sequentially and tries to find squares in // It loads several images sequentially and tries to find squares in
// each image // each image
@ -8,22 +9,18 @@
#include "opencv2/highgui.hpp" #include "opencv2/highgui.hpp"
#include <iostream> #include <iostream>
#include <math.h>
#include <string.h>
using namespace cv; using namespace cv;
using namespace std; using namespace std;
static void help() static void help(const char* programName)
{ {
cout << cout <<
"\nA program using pyramid scaling, Canny, contours, contour simpification and\n" "\nA program using pyramid scaling, Canny, contours and contour simplification\n"
"memory storage (it's got it all folks) to find\n" "to find squares in a list of images (pic1-6.png)\n"
"squares in a list of images pic1-6.png\n"
"Returns sequence of squares detected on the image.\n" "Returns sequence of squares detected on the image.\n"
"the sequence is stored in the specified memory storage\n"
"Call:\n" "Call:\n"
"./squares [file_name (optional)]\n" "./" << programName << " [file_name (optional)]\n"
"Using OpenCV version " << CV_VERSION << "\n" << endl; "Using OpenCV version " << CV_VERSION << "\n" << endl;
} }
@ -44,7 +41,6 @@ static double angle( Point pt1, Point pt2, Point pt0 )
} }
// returns sequence of squares detected on the image. // returns sequence of squares detected on the image.
// the sequence is stored in the specified memory storage
static void findSquares( const Mat& image, vector<vector<Point> >& squares ) static void findSquares( const Mat& image, vector<vector<Point> >& squares )
{ {
squares.clear(); squares.clear();
@ -93,7 +89,7 @@ static void findSquares( const Mat& image, vector<vector<Point> >& squares )
{ {
// approximate contour with accuracy proportional // approximate contour with accuracy proportional
// to the contour perimeter // to the contour perimeter
approxPolyDP(Mat(contours[i]), approx, arcLength(Mat(contours[i]), true)*0.02, true); approxPolyDP(contours[i], approx, arcLength(contours[i], true)*0.02, true);
// square contours should have 4 vertices after approximation // square contours should have 4 vertices after approximation
// relatively large area (to filter out noisy contours) // relatively large area (to filter out noisy contours)
@ -102,8 +98,8 @@ static void findSquares( const Mat& image, vector<vector<Point> >& squares )
// area may be positive or negative - in accordance with the // area may be positive or negative - in accordance with the
// contour orientation // contour orientation
if( approx.size() == 4 && if( approx.size() == 4 &&
fabs(contourArea(Mat(approx))) > 1000 && fabs(contourArea(approx)) > 1000 &&
isContourConvex(Mat(approx)) ) isContourConvex(approx) )
{ {
double maxCosine = 0; double maxCosine = 0;
@ -144,7 +140,7 @@ int main(int argc, char** argv)
{ {
static const char* names[] = { "../data/pic1.png", "../data/pic2.png", "../data/pic3.png", static const char* names[] = { "../data/pic1.png", "../data/pic2.png", "../data/pic3.png",
"../data/pic4.png", "../data/pic5.png", "../data/pic6.png", 0 }; "../data/pic4.png", "../data/pic5.png", "../data/pic6.png", 0 };
help(); help(argv[0]);
if( argc > 1) if( argc > 1)
{ {
@ -152,12 +148,11 @@ int main(int argc, char** argv)
names[1] = "0"; names[1] = "0";
} }
namedWindow( wndname, 1 );
vector<vector<Point> > squares; vector<vector<Point> > squares;
for( int i = 0; names[i] != 0; i++ ) for( int i = 0; names[i] != 0; i++ )
{ {
Mat image = imread(names[i], 1); Mat image = imread(names[i], IMREAD_COLOR);
if( image.empty() ) if( image.empty() )
{ {
cout << "Couldn't load " << names[i] << endl; cout << "Couldn't load " << names[i] << endl;
@ -167,7 +162,7 @@ int main(int argc, char** argv)
findSquares(image, squares); findSquares(image, squares);
drawSquares(image, squares); drawSquares(image, squares);
char c = (char)waitKey(); int c = waitKey();
if( c == 27 ) if( c == 27 )
break; break;
} }

@ -20,8 +20,9 @@ int parseCmdArgs(int argc, char** argv);
int main(int argc, char* argv[]) int main(int argc, char* argv[])
{ {
int retval = parseCmdArgs(argc, argv); int retval = parseCmdArgs(argc, argv);
if (retval) return -1; if (retval) return EXIT_FAILURE;
//![stitching]
Mat pano; Mat pano;
Ptr<Stitcher> stitcher = Stitcher::create(mode, try_use_gpu); Ptr<Stitcher> stitcher = Stitcher::create(mode, try_use_gpu);
Stitcher::Status status = stitcher->stitch(imgs, pano); Stitcher::Status status = stitcher->stitch(imgs, pano);
@ -29,12 +30,13 @@ int main(int argc, char* argv[])
if (status != Stitcher::OK) if (status != Stitcher::OK)
{ {
cout << "Can't stitch images, error code = " << int(status) << endl; cout << "Can't stitch images, error code = " << int(status) << endl;
return -1; return EXIT_FAILURE;
} }
//![stitching]
imwrite(result_name, pano); imwrite(result_name, pano);
cout << "stitching completed successfully\n" << result_name << " saved!"; cout << "stitching completed successfully\n" << result_name << " saved!";
return 0; return EXIT_SUCCESS;
} }
@ -63,7 +65,7 @@ int parseCmdArgs(int argc, char** argv)
if (argc == 1) if (argc == 1)
{ {
printUsage(argv); printUsage(argv);
return -1; return EXIT_FAILURE;
} }
for (int i = 1; i < argc; ++i) for (int i = 1; i < argc; ++i)
@ -71,7 +73,7 @@ int parseCmdArgs(int argc, char** argv)
if (string(argv[i]) == "--help" || string(argv[i]) == "/?") if (string(argv[i]) == "--help" || string(argv[i]) == "/?")
{ {
printUsage(argv); printUsage(argv);
return -1; return EXIT_FAILURE;
} }
else if (string(argv[i]) == "--try_use_gpu") else if (string(argv[i]) == "--try_use_gpu")
{ {
@ -82,7 +84,7 @@ int parseCmdArgs(int argc, char** argv)
else else
{ {
cout << "Bad --try_use_gpu flag value\n"; cout << "Bad --try_use_gpu flag value\n";
return -1; return EXIT_FAILURE;
} }
i++; i++;
} }
@ -104,7 +106,7 @@ int parseCmdArgs(int argc, char** argv)
else else
{ {
cout << "Bad --mode flag value\n"; cout << "Bad --mode flag value\n";
return -1; return EXIT_FAILURE;
} }
i++; i++;
} }
@ -114,7 +116,7 @@ int parseCmdArgs(int argc, char** argv)
if (img.empty()) if (img.empty())
{ {
cout << "Can't read image '" << argv[i] << "'\n"; cout << "Can't read image '" << argv[i] << "'\n";
return -1; return EXIT_FAILURE;
} }
if (divide_images) if (divide_images)
@ -130,5 +132,5 @@ int parseCmdArgs(int argc, char** argv)
imgs.push_back(img); imgs.push_back(img);
} }
} }
return 0; return EXIT_SUCCESS;
} }

@ -1,45 +1,3 @@
/*M///////////////////////////////////////////////////////////////////////////////////////
//
// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
//
// By downloading, copying, installing or using the software you agree to this license.
// If you do not agree to this license, do not download, install,
// copy or use the software.
//
//
// License Agreement
// For Open Source Computer Vision Library
//
// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.
// Copyright (C) 2009, Willow Garage Inc., all rights reserved.
// Third party copyrights are property of their respective owners.
//
// Redistribution and use in source and binary forms, with or without modification,
// are permitted provided that the following conditions are met:
//
// * Redistribution's of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
//
// * Redistribution's in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
//
// * The name of the copyright holders may not be used to endorse or promote products
// derived from this software without specific prior written permission.
//
// This software is provided by the copyright holders and contributors "as is" and
// any express or implied warranties, including, but not limited to, the implied
// warranties of merchantability and fitness for a particular purpose are disclaimed.
// In no event shall the Intel Corporation or contributors be liable for any direct,
// indirect, incidental, special, exemplary, or consequential damages
// (including, but not limited to, procurement of substitute goods or services;
// loss of use, data, or profits; or business interruption) however caused
// and on any theory of liability, whether in contract, strict liability,
// or tort (including negligence or otherwise) arising in any way out of
// the use of this software, even if advised of the possibility of such damage.
//
//
//M*/
#include <iostream> #include <iostream>
#include <fstream> #include <fstream>

@ -33,7 +33,7 @@ void Morphology_Operations( int, void* );
int main( int argc, char** argv ) int main( int argc, char** argv )
{ {
//![load] //![load]
CommandLineParser parser( argc, argv, "{@input | ../data/LinuxLogo.jpg | input image}" ); CommandLineParser parser( argc, argv, "{@input | ../data/baboon.jpg | input image}" );
src = imread( parser.get<String>( "@input" ), IMREAD_COLOR ); src = imread( parser.get<String>( "@input" ), IMREAD_COLOR );
if (src.empty()) if (src.empty())
{ {

@ -1,6 +1,3 @@
// The "Square Detector" program.
// It loads several images sequentially and tries to find squares in
// each image
#include "opencv2/core.hpp" #include "opencv2/core.hpp"
#include "opencv2/core/ocl.hpp" #include "opencv2/core/ocl.hpp"
@ -9,7 +6,6 @@
#include "opencv2/imgcodecs.hpp" #include "opencv2/imgcodecs.hpp"
#include "opencv2/highgui.hpp" #include "opencv2/highgui.hpp"
#include <iostream> #include <iostream>
#include <string.h>
using namespace cv; using namespace cv;
using namespace std; using namespace std;
@ -31,7 +27,6 @@ static double angle( Point pt1, Point pt2, Point pt0 )
// returns sequence of squares detected on the image. // returns sequence of squares detected on the image.
// the sequence is stored in the specified memory storage
static void findSquares( const UMat& image, vector<vector<Point> >& squares ) static void findSquares( const UMat& image, vector<vector<Point> >& squares )
{ {
squares.clear(); squares.clear();
@ -66,7 +61,7 @@ static void findSquares( const UMat& image, vector<vector<Point> >& squares )
{ {
// apply threshold if l!=0: // apply threshold if l!=0:
// tgray(x,y) = gray(x,y) < (l+1)*255/N ? 255 : 0 // tgray(x,y) = gray(x,y) < (l+1)*255/N ? 255 : 0
cv::threshold(gray0, gray, (l+1)*255/N, 255, THRESH_BINARY); threshold(gray0, gray, (l+1)*255/N, 255, THRESH_BINARY);
} }
// find contours and store them all as a list // find contours and store them all as a list
@ -80,7 +75,7 @@ static void findSquares( const UMat& image, vector<vector<Point> >& squares )
// approximate contour with accuracy proportional // approximate contour with accuracy proportional
// to the contour perimeter // to the contour perimeter
approxPolyDP(Mat(contours[i]), approx, arcLength(Mat(contours[i]), true)*0.02, true); approxPolyDP(contours[i], approx, arcLength(contours[i], true)*0.02, true);
// square contours should have 4 vertices after approximation // square contours should have 4 vertices after approximation
// relatively large area (to filter out noisy contours) // relatively large area (to filter out noisy contours)
@ -89,8 +84,8 @@ static void findSquares( const UMat& image, vector<vector<Point> >& squares )
// area may be positive or negative - in accordance with the // area may be positive or negative - in accordance with the
// contour orientation // contour orientation
if( approx.size() == 4 && if( approx.size() == 4 &&
fabs(contourArea(Mat(approx))) > 1000 && fabs(contourArea(approx)) > 1000 &&
isContourConvex(Mat(approx)) ) isContourConvex(approx) )
{ {
double maxCosine = 0; double maxCosine = 0;
@ -150,7 +145,7 @@ int main(int argc, char** argv)
if(cmd.has("help")) if(cmd.has("help"))
{ {
cout << "Usage : squares [options]" << endl; cout << "Usage : " << argv[0] << " [options]" << endl;
cout << "Available options:" << endl; cout << "Available options:" << endl;
cmd.printMessage(); cmd.printMessage();
return EXIT_SUCCESS; return EXIT_SUCCESS;
@ -158,7 +153,7 @@ int main(int argc, char** argv)
if (cmd.has("cpu_mode")) if (cmd.has("cpu_mode"))
{ {
ocl::setUseOpenCL(false); ocl::setUseOpenCL(false);
std::cout << "OpenCL was disabled" << std::endl; cout << "OpenCL was disabled" << endl;
} }
string inputName = cmd.get<string>("i"); string inputName = cmd.get<string>("i");
@ -185,11 +180,11 @@ int main(int argc, char** argv)
do do
{ {
int64 t_start = cv::getTickCount(); int64 t_start = getTickCount();
findSquares(image, squares); findSquares(image, squares);
t_cpp += cv::getTickCount() - t_start; t_cpp += cv::getTickCount() - t_start;
t_start = cv::getTickCount(); t_start = getTickCount();
cout << "run loop: " << j << endl; cout << "run loop: " << j << endl;
} }

Loading…
Cancel
Save