diff --git a/doc/tutorials/features2d/trackingmotion/harris_detector/harris_detector.rst b/doc/tutorials/features2d/trackingmotion/harris_detector/harris_detector.rst index de849c74f..63e35b26c 100644 --- a/doc/tutorials/features2d/trackingmotion/harris_detector/harris_detector.rst +++ b/doc/tutorials/features2d/trackingmotion/harris_detector/harris_detector.rst @@ -6,15 +6,46 @@ Harris corner detector Goal ===== -In this tutorial you will learn how to: +In this tutorial you will learn: .. container:: enumeratevisibleitemswithsquare + * What features are and why they are important * Use the function :corner_harris:`cornerHarris <>` to detect corners using the Harris-Stephens method. Theory ====== +What is a feature? +------------------- + +.. container:: enumeratevisibleitemswithsquare + + * In computer vision, usually we need to find matching points between different frames of an environment. Why? If we know how two images relate to each other, we can use *both* images to extract information of them. + + * When we say **matching points** we are referring, in a general sense, to *characteristics* in the scene that we can recognize easily. We call these characteristics **features**. + + * **So, what characteristics should a feature have?** + + * It must be *uniquely recognizable* + + +Types of Image Features +------------------------ + +To mention a few: + +.. container:: enumeratevisibleitemswithsquare + + * Edges + * Corner (also known as interest points) + * Blobs (also known as regions of interest ) + +In this tutorial we will study the *corner* features, specifically. + +Why is a corner so special? +---------------------------- + Code ==== diff --git a/doc/tutorials/imgproc/erosion_dilatation/erosion_dilatation.rst b/doc/tutorials/imgproc/erosion_dilatation/erosion_dilatation.rst index 601abb893..49639060a 100644 --- a/doc/tutorials/imgproc/erosion_dilatation/erosion_dilatation.rst +++ b/doc/tutorials/imgproc/erosion_dilatation/erosion_dilatation.rst @@ -70,7 +70,7 @@ Erosion Code ====== -This tutorial code's is shown lines below. You can also download it from `here `_ +This tutorial code's is shown lines below. You can also download it from `here `_ .. code-block:: cpp @@ -175,16 +175,16 @@ Explanation #. Most of the stuff shown is known by you (if you have any doubt, please refer to the tutorials in previous sections). Let's check the general structure of the program: - * Load an image (can be RGB or grayscale) + .. container:: enumeratevisibleitemswithsquare - * Create two windows (one for dilation output, the other for erosion) + * Load an image (can be RGB or grayscale) + * Create two windows (one for dilation output, the other for erosion) + * Create a set of 02 Trackbars for each operation: - * Create a set of 02 Trackbars for each operation: + * The first trackbar "Element" returns either **erosion_elem** or **dilation_elem** + * The second trackbar "Kernel size" return **erosion_size** or **dilation_size** for the corresponding operation. - * The first trackbar "Element" returns either **erosion_elem** or **dilation_elem** - * The second trackbar "Kernel size" return **erosion_size** or **dilation_size** for the corresponding operation. - - * Every time we move any slider, the user's function **Erosion** or **Dilation** will be called and it will update the output image based on the current trackbar values. + * Every time we move any slider, the user's function **Erosion** or **Dilation** will be called and it will update the output image based on the current trackbar values. Let's analyze these two functions: @@ -220,13 +220,15 @@ Explanation Size( 2*erosion_size + 1, 2*erosion_size+1 ), Point( erosion_size, erosion_size ) ); - We can choose any of three shapes for our kernel: + We can choose any of three shapes for our kernel: - * Rectangular box: MORPH_RECT - * Cross: MORPH_CROSS - * Ellipse: MORPH_ELLIPSE + .. container:: enumeratevisibleitemswithsquare - Then, we just have to specify the size of our kernel and the *anchor point*. If not specified, it is assumed to be in the center. + + Rectangular box: MORPH_RECT + + Cross: MORPH_CROSS + + Ellipse: MORPH_ELLIPSE + + Then, we just have to specify the size of our kernel and the *anchor point*. If not specified, it is assumed to be in the center. * That is all. We are ready to perform the erosion of our image. @@ -271,4 +273,4 @@ Results .. image:: images/Morphology_1_Tutorial_Cover.jpg :alt: Dilation and Erosion application - :align: center \ No newline at end of file + :align: center diff --git a/doc/tutorials/imgproc/imgtrans/canny_detector/canny_detector.rst b/doc/tutorials/imgproc/imgtrans/canny_detector/canny_detector.rst index 73a25382f..e7fe4dc69 100644 --- a/doc/tutorials/imgproc/imgtrans/canny_detector/canny_detector.rst +++ b/doc/tutorials/imgproc/imgtrans/canny_detector/canny_detector.rst @@ -8,7 +8,9 @@ Goal In this tutorial you will learn how to: -a. Use the OpenCV function :canny:`Canny <>` to implement the Canny Edge Detector. +.. container:: enumeratevisibleitemswithsquare + + * Use the OpenCV function :canny:`Canny <>` to implement the Canny Edge Detector. Theory ======= @@ -265,21 +267,21 @@ Explanation Result ======= -#. After compiling the code above, we can run it giving as argument the path to an image. For example, using as an input the following image: +* After compiling the code above, we can run it giving as argument the path to an image. For example, using as an input the following image: .. image:: images/Canny_Detector_Tutorial_Original_Image.jpg :alt: Original test image :width: 200pt :align: center - and moving the slider, trying different threshold, we obtain the following result: +* Moving the slider, trying different threshold, we obtain the following result: .. image:: images/Canny_Detector_Tutorial_Result.jpg :alt: Result after running Canny :width: 200pt :align: center - Notice how the image is superposed to the black background on the edge regions. +* Notice how the image is superposed to the black background on the edge regions. diff --git a/doc/tutorials/imgproc/imgtrans/copyMakeBorder/copyMakeBorder.rst b/doc/tutorials/imgproc/imgtrans/copyMakeBorder/copyMakeBorder.rst index 5558b3501..877accd52 100644 --- a/doc/tutorials/imgproc/imgtrans/copyMakeBorder/copyMakeBorder.rst +++ b/doc/tutorials/imgproc/imgtrans/copyMakeBorder/copyMakeBorder.rst @@ -8,10 +8,12 @@ Goal In this tutorial you will learn how to: -#. Use the OpenCV function :copy_make_border:`copyMakeBorder <>` to set the borders (extra padding to your image). +.. container:: enumeratevisibleitemswithsquare + + * Use the OpenCV function :copy_make_border:`copyMakeBorder <>` to set the borders (extra padding to your image). Theory -============ +======== .. note:: The explanation below belongs to the book **Learning OpenCV** by Bradski and Kaehler. @@ -208,10 +210,12 @@ Results #. After compiling the code above, you can execute it giving as argument the path of an image. The result should be: - * By default, it begins with the border set to BORDER_CONSTANT. Hence, a succession of random colored borders will be shown. - * If you press 'r', the border will become a replica of the edge pixels. - * If you press 'c', the random colored borders will appear again - * If you press 'ESC' the program will exit. + .. container:: enumeratevisibleitemswithsquare + + * By default, it begins with the border set to BORDER_CONSTANT. Hence, a succession of random colored borders will be shown. + * If you press 'r', the border will become a replica of the edge pixels. + * If you press 'c', the random colored borders will appear again + * If you press 'ESC' the program will exit. Below some screenshot showing how the border changes color and how the *BORDER_REPLICATE* option looks: diff --git a/doc/tutorials/imgproc/imgtrans/filter_2d/filter_2d.rst b/doc/tutorials/imgproc/imgtrans/filter_2d/filter_2d.rst index 7fad4b56a..bee8f3c60 100644 --- a/doc/tutorials/imgproc/imgtrans/filter_2d/filter_2d.rst +++ b/doc/tutorials/imgproc/imgtrans/filter_2d/filter_2d.rst @@ -8,10 +8,12 @@ Goal In this tutorial you will learn how to: -* Use the OpenCV function :filter2d:`filter2D <>` to create your own linear filters. +.. container:: enumeratevisibleitemswithsquare + + * Use the OpenCV function :filter2d:`filter2D <>` to create your own linear filters. Theory -============ +======= .. note:: The explanation below belongs to the book **Learning OpenCV** by Bradski and Kaehler. diff --git a/doc/tutorials/imgproc/imgtrans/laplace_operator/laplace_operator.rst b/doc/tutorials/imgproc/imgtrans/laplace_operator/laplace_operator.rst index 99bb326ac..764b11966 100644 --- a/doc/tutorials/imgproc/imgtrans/laplace_operator/laplace_operator.rst +++ b/doc/tutorials/imgproc/imgtrans/laplace_operator/laplace_operator.rst @@ -9,7 +9,9 @@ Goal In this tutorial you will learn how to: -a. Use the OpenCV function :laplacian:`Laplacian <>` to implement a discrete analog of the *Laplacian operator*. +.. container:: enumeratevisibleitemswithsquare + + * Use the OpenCV function :laplacian:`Laplacian <>` to implement a discrete analog of the *Laplacian operator*. Theory diff --git a/doc/tutorials/imgproc/imgtrans/sobel_derivatives/sobel_derivatives.rst b/doc/tutorials/imgproc/imgtrans/sobel_derivatives/sobel_derivatives.rst index d544b109c..007746e39 100644 --- a/doc/tutorials/imgproc/imgtrans/sobel_derivatives/sobel_derivatives.rst +++ b/doc/tutorials/imgproc/imgtrans/sobel_derivatives/sobel_derivatives.rst @@ -9,8 +9,10 @@ Goal In this tutorial you will learn how to: -#. Use the OpenCV function :sobel:`Sobel <>` to calculate the derivatives from an image. -#. Use the OpenCV function :scharr:`Scharr <>` to calculate a more accurate derivative for a kernel of size :math:`3 \cdot 3` +.. container:: enumeratevisibleitemswithsquare + + * Use the OpenCV function :sobel:`Sobel <>` to calculate the derivatives from an image. + * Use the OpenCV function :scharr:`Scharr <>` to calculate a more accurate derivative for a kernel of size :math:`3 \cdot 3` Theory ======== diff --git a/doc/tutorials/imgproc/opening_closing_hats/opening_closing_hats.rst b/doc/tutorials/imgproc/opening_closing_hats/opening_closing_hats.rst index 40b06a5ea..5ce49d305 100644 --- a/doc/tutorials/imgproc/opening_closing_hats/opening_closing_hats.rst +++ b/doc/tutorials/imgproc/opening_closing_hats/opening_closing_hats.rst @@ -8,25 +8,28 @@ Goal In this tutorial you will learn how to: -* Use the OpenCV function :morphology_ex:`morphologyEx <>` to apply Morphological Transformation such as: - - * Opening - * Closing - * Morphological Gradient - * Top Hat - * Black Hat +.. container:: enumeratevisibleitemswithsquare -Cool Theory -============ + * Use the OpenCV function :morphology_ex:`morphologyEx <>` to apply Morphological Transformation such as: + + + Opening + + Closing + + Morphological Gradient + + Top Hat + + Black Hat + +Theory +======= .. note:: The explanation below belongs to the book **Learning OpenCV** by Bradski and Kaehler. In the previous tutorial we covered two basic Morphology operations: -* Erosion +.. container:: enumeratevisibleitemswithsquare -* Dilation. + * Erosion + * Dilation. Based on these two we can effectuate more sophisticated transformations to our images. Here we discuss briefly 05 operations offered by OpenCV: @@ -246,11 +249,11 @@ Explanation * **dst**: Output image * **operation**: The kind of morphology transformation to be performed. Note that we have 5 alternatives: - * *Opening*: MORPH_OPEN : 2 - * *Closing*: MORPH_CLOSE: 3 - * *Gradient*: MORPH_GRADIENT: 4 - * *Top Hat*: MORPH_TOPHAT: 5 - * *Black Hat*: MORPH_BLACKHAT: 6 + + *Opening*: MORPH_OPEN : 2 + + *Closing*: MORPH_CLOSE: 3 + + *Gradient*: MORPH_GRADIENT: 4 + + *Top Hat*: MORPH_TOPHAT: 5 + + *Black Hat*: MORPH_BLACKHAT: 6 As you can see the values range from <2-6>, that is why we add (+2) to the values entered by the Trackbar: diff --git a/doc/tutorials/imgproc/pyramids/pyramids.rst b/doc/tutorials/imgproc/pyramids/pyramids.rst index 41c734742..43b03e45b 100644 --- a/doc/tutorials/imgproc/pyramids/pyramids.rst +++ b/doc/tutorials/imgproc/pyramids/pyramids.rst @@ -8,7 +8,9 @@ Goal In this tutorial you will learn how to: -* Use the OpenCV functions :pyr_up:`pyrUp <>` and :pyr_down:`pyrDown <>` to downsample or upsample a given image. +.. container:: enumeratevisibleitemswithsquare + + * Use the OpenCV functions :pyr_up:`pyrUp <>` and :pyr_down:`pyrDown <>` to downsample or upsample a given image. Theory ======= @@ -16,25 +18,30 @@ Theory .. note:: The explanation below belongs to the book **Learning OpenCV** by Bradski and Kaehler. -* Usually we need to convert an image to a size different than its original. For this, there are two possible options: - - * *Upsize* the image (zoom in) or - * *Downsize* it (zoom out). +.. container:: enumeratevisibleitemswithsquare + + * Usually we need to convert an image to a size different than its original. For this, there are two possible options: + + #. *Upsize* the image (zoom in) or + #. *Downsize* it (zoom out). + + * Although there is a *geometric transformation* function in OpenCV that -literally- resize an image (:resize:`resize <>`, which we will show in a future tutorial), in this section we analyze first the use of **Image Pyramids**, which are widely applied in a huge range of vision applications. -* Although there is a *geometric transformation* function in OpenCV that -literally- resize an image (:resize:`resize <>`, which we will show in a future tutorial), in this section we analyze first the use of **Image Pyramids**, which are widely applied in a huge range of vision applications. Image Pyramid -------------- -* An image pyramid is a collection of images - all arising from a single original image - that are successively downsampled until some desired stopping point is reached. +.. container:: enumeratevisibleitemswithsquare -* There are two common kinds of image pyramids: + * An image pyramid is a collection of images - all arising from a single original image - that are successively downsampled until some desired stopping point is reached. - * **Gaussian pyramid:** Used to downsample images + * There are two common kinds of image pyramids: - * **Laplacian pyramid:** Used to reconstruct an upsampled image from an image lower in the pyramid (with less resolution) + * **Gaussian pyramid:** Used to downsample images -* In this tutorial we'll use the *Gaussian pyramid*. + * **Laplacian pyramid:** Used to reconstruct an upsampled image from an image lower in the pyramid (with less resolution) + + * In this tutorial we'll use the *Gaussian pyramid*. Gaussian Pyramid ^^^^^^^^^^^^^^^^^ diff --git a/doc/tutorials/imgproc/threshold/threshold.rst b/doc/tutorials/imgproc/threshold/threshold.rst index 1ac4919bd..9b164b69c 100644 --- a/doc/tutorials/imgproc/threshold/threshold.rst +++ b/doc/tutorials/imgproc/threshold/threshold.rst @@ -8,7 +8,9 @@ Goal In this tutorial you will learn how to: -* Perform basic thresholding operations using OpenCV function :threshold:`threshold <>` +.. container:: enumeratevisibleitemswithsquare + + * Perform basic thresholding operations using OpenCV function :threshold:`threshold <>` Cool Theory @@ -305,4 +307,4 @@ Results .. image:: images/Threshold_Tutorial_Result_Zero.jpg :alt: Threshold Result Zero - :align: center \ No newline at end of file + :align: center