Normalize whitespace in documentation and text files
This commit is contained in:
@@ -112,21 +112,21 @@ This tutorial code's is shown lines below. You can also download it from `here <
|
||||
|
||||
/// Create Erosion Trackbar
|
||||
createTrackbar( "Element:\n 0: Rect \n 1: Cross \n 2: Ellipse", "Erosion Demo",
|
||||
&erosion_elem, max_elem,
|
||||
Erosion );
|
||||
&erosion_elem, max_elem,
|
||||
Erosion );
|
||||
|
||||
createTrackbar( "Kernel size:\n 2n +1", "Erosion Demo",
|
||||
&erosion_size, max_kernel_size,
|
||||
Erosion );
|
||||
&erosion_size, max_kernel_size,
|
||||
Erosion );
|
||||
|
||||
/// Create Dilation Trackbar
|
||||
createTrackbar( "Element:\n 0: Rect \n 1: Cross \n 2: Ellipse", "Dilation Demo",
|
||||
&dilation_elem, max_elem,
|
||||
Dilation );
|
||||
&dilation_elem, max_elem,
|
||||
Dilation );
|
||||
|
||||
createTrackbar( "Kernel size:\n 2n +1", "Dilation Demo",
|
||||
&dilation_size, max_kernel_size,
|
||||
Dilation );
|
||||
&dilation_size, max_kernel_size,
|
||||
Dilation );
|
||||
|
||||
/// Default start
|
||||
Erosion( 0, 0 );
|
||||
@@ -145,8 +145,8 @@ This tutorial code's is shown lines below. You can also download it from `here <
|
||||
else if( erosion_elem == 2) { erosion_type = MORPH_ELLIPSE; }
|
||||
|
||||
Mat element = getStructuringElement( erosion_type,
|
||||
Size( 2*erosion_size + 1, 2*erosion_size+1 ),
|
||||
Point( erosion_size, erosion_size ) );
|
||||
Size( 2*erosion_size + 1, 2*erosion_size+1 ),
|
||||
Point( erosion_size, erosion_size ) );
|
||||
|
||||
/// Apply the erosion operation
|
||||
erode( src, erosion_dst, element );
|
||||
@@ -162,8 +162,8 @@ This tutorial code's is shown lines below. You can also download it from `here <
|
||||
else if( dilation_elem == 2) { dilation_type = MORPH_ELLIPSE; }
|
||||
|
||||
Mat element = getStructuringElement( dilation_type,
|
||||
Size( 2*dilation_size + 1, 2*dilation_size+1 ),
|
||||
Point( dilation_size, dilation_size ) );
|
||||
Size( 2*dilation_size + 1, 2*dilation_size+1 ),
|
||||
Point( dilation_size, dilation_size ) );
|
||||
/// Apply the dilation operation
|
||||
dilate( src, dilation_dst, element );
|
||||
imshow( "Dilation Demo", dilation_dst );
|
||||
@@ -201,8 +201,8 @@ Explanation
|
||||
else if( erosion_elem == 2) { erosion_type = MORPH_ELLIPSE; }
|
||||
|
||||
Mat element = getStructuringElement( erosion_type,
|
||||
Size( 2*erosion_size + 1, 2*erosion_size+1 ),
|
||||
Point( erosion_size, erosion_size ) );
|
||||
Size( 2*erosion_size + 1, 2*erosion_size+1 ),
|
||||
Point( erosion_size, erosion_size ) );
|
||||
/// Apply the erosion operation
|
||||
erode( src, erosion_dst, element );
|
||||
imshow( "Erosion Demo", erosion_dst );
|
||||
@@ -216,17 +216,17 @@ Explanation
|
||||
|
||||
.. code-block:: cpp
|
||||
|
||||
Mat element = getStructuringElement( erosion_type,
|
||||
Size( 2*erosion_size + 1, 2*erosion_size+1 ),
|
||||
Point( erosion_size, erosion_size ) );
|
||||
Mat element = getStructuringElement( erosion_type,
|
||||
Size( 2*erosion_size + 1, 2*erosion_size+1 ),
|
||||
Point( erosion_size, erosion_size ) );
|
||||
|
||||
We can choose any of three shapes for our kernel:
|
||||
|
||||
.. container:: enumeratevisibleitemswithsquare
|
||||
|
||||
+ Rectangular box: MORPH_RECT
|
||||
+ Cross: MORPH_CROSS
|
||||
+ Ellipse: MORPH_ELLIPSE
|
||||
+ 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.
|
||||
|
||||
@@ -251,8 +251,8 @@ The code is below. As you can see, it is completely similar to the snippet of co
|
||||
else if( dilation_elem == 2) { dilation_type = MORPH_ELLIPSE; }
|
||||
|
||||
Mat element = getStructuringElement( dilation_type,
|
||||
Size( 2*dilation_size + 1, 2*dilation_size+1 ),
|
||||
Point( dilation_size, dilation_size ) );
|
||||
Size( 2*dilation_size + 1, 2*dilation_size+1 ),
|
||||
Point( dilation_size, dilation_size ) );
|
||||
/// Apply the dilation operation
|
||||
dilate( src, dilation_dst, element );
|
||||
imshow( "Dilation Demo", dilation_dst );
|
||||
|
||||
@@ -159,35 +159,35 @@ Code
|
||||
if( display_caption( "Homogeneous Blur" ) != 0 ) { return 0; }
|
||||
|
||||
for ( int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2 )
|
||||
{ blur( src, dst, Size( i, i ), Point(-1,-1) );
|
||||
{ blur( src, dst, Size( i, i ), Point(-1,-1) );
|
||||
if( display_dst( DELAY_BLUR ) != 0 ) { return 0; } }
|
||||
|
||||
/// Applying Gaussian blur
|
||||
if( display_caption( "Gaussian Blur" ) != 0 ) { return 0; }
|
||||
|
||||
for ( int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2 )
|
||||
{ GaussianBlur( src, dst, Size( i, i ), 0, 0 );
|
||||
{ GaussianBlur( src, dst, Size( i, i ), 0, 0 );
|
||||
if( display_dst( DELAY_BLUR ) != 0 ) { return 0; } }
|
||||
|
||||
/// Applying Median blur
|
||||
if( display_caption( "Median Blur" ) != 0 ) { return 0; }
|
||||
if( display_caption( "Median Blur" ) != 0 ) { return 0; }
|
||||
|
||||
for ( int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2 )
|
||||
{ medianBlur ( src, dst, i );
|
||||
for ( int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2 )
|
||||
{ medianBlur ( src, dst, i );
|
||||
if( display_dst( DELAY_BLUR ) != 0 ) { return 0; } }
|
||||
|
||||
/// Applying Bilateral Filter
|
||||
if( display_caption( "Bilateral Blur" ) != 0 ) { return 0; }
|
||||
/// Applying Bilateral Filter
|
||||
if( display_caption( "Bilateral Blur" ) != 0 ) { return 0; }
|
||||
|
||||
for ( int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2 )
|
||||
{ bilateralFilter ( src, dst, i, i*2, i/2 );
|
||||
for ( int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2 )
|
||||
{ bilateralFilter ( src, dst, i, i*2, i/2 );
|
||||
if( display_dst( DELAY_BLUR ) != 0 ) { return 0; } }
|
||||
|
||||
/// Wait until user press a key
|
||||
display_caption( "End: Press a key!" );
|
||||
/// Wait until user press a key
|
||||
display_caption( "End: Press a key!" );
|
||||
|
||||
waitKey(0);
|
||||
return 0;
|
||||
waitKey(0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int display_caption( char* caption )
|
||||
|
||||
@@ -94,7 +94,7 @@ Code
|
||||
* Loads an image
|
||||
* Convert the original to HSV format and separate only *Hue* channel to be used for the Histogram (using the OpenCV function :mix_channels:`mixChannels <>`)
|
||||
* Let the user to enter the number of bins to be used in the calculation of the histogram.
|
||||
* Calculate the histogram (and update it if the bins change) and the backprojection of the same image.
|
||||
* Calculate the histogram (and update it if the bins change) and the backprojection of the same image.
|
||||
* Display the backprojection and the histogram in windows.
|
||||
|
||||
* **Downloadable code**:
|
||||
|
||||
@@ -124,34 +124,34 @@ Code
|
||||
|
||||
for( int j = 0; j < src.rows; j++ )
|
||||
{ for( int i = 0; i < src.cols; i++ )
|
||||
{
|
||||
{
|
||||
switch( ind )
|
||||
{
|
||||
case 0:
|
||||
if( i > src.cols*0.25 && i < src.cols*0.75 && j > src.rows*0.25 && j < src.rows*0.75 )
|
||||
{
|
||||
case 0:
|
||||
if( i > src.cols*0.25 && i < src.cols*0.75 && j > src.rows*0.25 && j < src.rows*0.75 )
|
||||
{
|
||||
map_x.at<float>(j,i) = 2*( i - src.cols*0.25 ) + 0.5 ;
|
||||
map_y.at<float>(j,i) = 2*( j - src.rows*0.25 ) + 0.5 ;
|
||||
}
|
||||
else
|
||||
{ map_x.at<float>(j,i) = 0 ;
|
||||
map_y.at<float>(j,i) = 0 ;
|
||||
map_x.at<float>(j,i) = 2*( i - src.cols*0.25 ) + 0.5 ;
|
||||
map_y.at<float>(j,i) = 2*( j - src.rows*0.25 ) + 0.5 ;
|
||||
}
|
||||
else
|
||||
{ map_x.at<float>(j,i) = 0 ;
|
||||
map_y.at<float>(j,i) = 0 ;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
map_x.at<float>(j,i) = i ;
|
||||
map_y.at<float>(j,i) = src.rows - j ;
|
||||
break;
|
||||
case 1:
|
||||
map_x.at<float>(j,i) = i ;
|
||||
map_y.at<float>(j,i) = src.rows - j ;
|
||||
break;
|
||||
case 2:
|
||||
map_x.at<float>(j,i) = src.cols - i ;
|
||||
map_y.at<float>(j,i) = j ;
|
||||
break;
|
||||
map_x.at<float>(j,i) = src.cols - i ;
|
||||
map_y.at<float>(j,i) = j ;
|
||||
break;
|
||||
case 3:
|
||||
map_x.at<float>(j,i) = src.cols - i ;
|
||||
map_y.at<float>(j,i) = src.rows - j ;
|
||||
break;
|
||||
map_x.at<float>(j,i) = src.cols - i ;
|
||||
map_y.at<float>(j,i) = src.rows - j ;
|
||||
break;
|
||||
} // end of switch
|
||||
}
|
||||
}
|
||||
}
|
||||
ind++;
|
||||
}
|
||||
@@ -241,34 +241,34 @@ Explanation
|
||||
|
||||
for( int j = 0; j < src.rows; j++ )
|
||||
{ for( int i = 0; i < src.cols; i++ )
|
||||
{
|
||||
{
|
||||
switch( ind )
|
||||
{
|
||||
case 0:
|
||||
if( i > src.cols*0.25 && i < src.cols*0.75 && j > src.rows*0.25 && j < src.rows*0.75 )
|
||||
{
|
||||
case 0:
|
||||
if( i > src.cols*0.25 && i < src.cols*0.75 && j > src.rows*0.25 && j < src.rows*0.75 )
|
||||
{
|
||||
map_x.at<float>(j,i) = 2*( i - src.cols*0.25 ) + 0.5 ;
|
||||
map_y.at<float>(j,i) = 2*( j - src.rows*0.25 ) + 0.5 ;
|
||||
}
|
||||
else
|
||||
{ map_x.at<float>(j,i) = 0 ;
|
||||
map_y.at<float>(j,i) = 0 ;
|
||||
map_x.at<float>(j,i) = 2*( i - src.cols*0.25 ) + 0.5 ;
|
||||
map_y.at<float>(j,i) = 2*( j - src.rows*0.25 ) + 0.5 ;
|
||||
}
|
||||
else
|
||||
{ map_x.at<float>(j,i) = 0 ;
|
||||
map_y.at<float>(j,i) = 0 ;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
map_x.at<float>(j,i) = i ;
|
||||
map_y.at<float>(j,i) = src.rows - j ;
|
||||
break;
|
||||
case 1:
|
||||
map_x.at<float>(j,i) = i ;
|
||||
map_y.at<float>(j,i) = src.rows - j ;
|
||||
break;
|
||||
case 2:
|
||||
map_x.at<float>(j,i) = src.cols - i ;
|
||||
map_y.at<float>(j,i) = j ;
|
||||
break;
|
||||
map_x.at<float>(j,i) = src.cols - i ;
|
||||
map_y.at<float>(j,i) = j ;
|
||||
break;
|
||||
case 3:
|
||||
map_x.at<float>(j,i) = src.cols - i ;
|
||||
map_y.at<float>(j,i) = src.rows - j ;
|
||||
break;
|
||||
map_x.at<float>(j,i) = src.cols - i ;
|
||||
map_y.at<float>(j,i) = src.rows - j ;
|
||||
break;
|
||||
} // end of switch
|
||||
}
|
||||
}
|
||||
}
|
||||
ind++;
|
||||
}
|
||||
|
||||
@@ -154,13 +154,13 @@ This tutorial code's is shown lines below. You can also download it from `here <
|
||||
|
||||
/// Create Trackbar to select kernel type
|
||||
createTrackbar( "Element:\n 0: Rect - 1: Cross - 2: Ellipse", window_name,
|
||||
&morph_elem, max_elem,
|
||||
Morphology_Operations );
|
||||
&morph_elem, max_elem,
|
||||
Morphology_Operations );
|
||||
|
||||
/// Create Trackbar to choose kernel size
|
||||
createTrackbar( "Kernel size:\n 2n +1", window_name,
|
||||
&morph_size, max_kernel_size,
|
||||
Morphology_Operations );
|
||||
&morph_size, max_kernel_size,
|
||||
Morphology_Operations );
|
||||
|
||||
/// Default start
|
||||
Morphology_Operations( 0, 0 );
|
||||
@@ -211,16 +211,16 @@ Explanation
|
||||
.. code-block:: cpp
|
||||
|
||||
createTrackbar( "Element:\n 0: Rect - 1: Cross - 2: Ellipse", window_name,
|
||||
&morph_elem, max_elem,
|
||||
Morphology_Operations );
|
||||
&morph_elem, max_elem,
|
||||
Morphology_Operations );
|
||||
|
||||
* The final trackbar **"Kernel Size"** returns the size of the kernel to be used (**morph_size**)
|
||||
|
||||
.. code-block:: cpp
|
||||
|
||||
createTrackbar( "Kernel size:\n 2n +1", window_name,
|
||||
&morph_size, max_kernel_size,
|
||||
Morphology_Operations );
|
||||
&morph_size, max_kernel_size,
|
||||
Morphology_Operations );
|
||||
|
||||
|
||||
* Every time we move any slider, the user's function **Morphology_Operations** will be called to effectuate a new morphology operation and it will update the output image based on the current trackbar values.
|
||||
|
||||
@@ -129,7 +129,7 @@ This tutorial code's is shown lines below. You can also download it from `here <
|
||||
c = waitKey(10);
|
||||
|
||||
if( (char)c == 27 )
|
||||
{ break; }
|
||||
{ break; }
|
||||
if( (char)c == 'u' )
|
||||
{ pyrUp( tmp, dst, Size( tmp.cols*2, tmp.rows*2 ) );
|
||||
printf( "** Zoom In: Image x 2 \n" );
|
||||
@@ -188,7 +188,7 @@ Explanation
|
||||
c = waitKey(10);
|
||||
|
||||
if( (char)c == 27 )
|
||||
{ break; }
|
||||
{ break; }
|
||||
if( (char)c == 'u' )
|
||||
{ pyrUp( tmp, dst, Size( tmp.cols*2, tmp.rows*2 ) );
|
||||
printf( "** Zoom In: Image x 2 \n" );
|
||||
|
||||
@@ -7,502 +7,502 @@ In this section you will learn about the image processing (manipulation) functio
|
||||
|
||||
.. include:: ../../definitions/tocDefinitions.rst
|
||||
|
||||
|
||||
+
|
||||
|
||||
+
|
||||
.. tabularcolumns:: m{100pt} m{300pt}
|
||||
.. cssclass:: toctableopencv
|
||||
|
||||
===================== ==============================================
|
||||
|ImageProcessing_1| **Title:** :ref:`Smoothing`
|
||||
|
||||
|
||||
*Compatibility:* > OpenCV 2.0
|
||||
|
||||
|
||||
*Author:* |Author_AnaH|
|
||||
|
||||
|
||||
Let's take a look at some basic linear filters!
|
||||
|
||||
|
||||
===================== ==============================================
|
||||
|
||||
|
||||
.. |ImageProcessing_1| image:: images/Smoothing_Tutorial_Cover.jpg
|
||||
:height: 90pt
|
||||
:width: 90pt
|
||||
|
||||
+
|
||||
|
||||
+
|
||||
.. tabularcolumns:: m{100pt} m{300pt}
|
||||
.. cssclass:: toctableopencv
|
||||
|
||||
===================== ==============================================
|
||||
|ImageProcessing_2| **Title:** :ref:`Morphology_1`
|
||||
|
||||
|
||||
*Compatibility:* > OpenCV 2.0
|
||||
|
||||
|
||||
Author: |Author_AnaH|
|
||||
|
||||
|
||||
Let's *change* the shape of objects!
|
||||
|
||||
|
||||
===================== ==============================================
|
||||
|
||||
|
||||
.. |ImageProcessing_2| image:: images/Morphology_1_Tutorial_Cover.jpg
|
||||
:height: 90pt
|
||||
:width: 90pt
|
||||
|
||||
+
|
||||
|
||||
+
|
||||
.. tabularcolumns:: m{100pt} m{300pt}
|
||||
.. cssclass:: toctableopencv
|
||||
|
||||
================= ==================================================
|
||||
|Morphology_2| **Title:** :ref:`Morphology_2`
|
||||
|
||||
|
||||
*Compatibility:* > OpenCV 2.0
|
||||
|
||||
|
||||
*Author:* |Author_AnaH|
|
||||
|
||||
|
||||
Here we investigate different morphology operators
|
||||
|
||||
|
||||
================= ==================================================
|
||||
|
||||
|
||||
.. |Morphology_2| image:: images/Morphology_2_Tutorial_Cover.jpg
|
||||
:height: 90pt
|
||||
:width: 90pt
|
||||
|
||||
+
|
||||
|
||||
+
|
||||
|
||||
.. tabularcolumns:: m{100pt} m{300pt}
|
||||
.. cssclass:: toctableopencv
|
||||
|
||||
|
||||
===================== ==============================================
|
||||
|Pyramids| **Title:** :ref:`Pyramids`
|
||||
|
||||
|
||||
*Compatibility:* > OpenCV 2.0
|
||||
|
||||
|
||||
*Author:* |Author_AnaH|
|
||||
|
||||
|
||||
What if I need a bigger/smaller image?
|
||||
|
||||
|
||||
===================== ==============================================
|
||||
|
||||
|
||||
.. |Pyramids| image:: images/Pyramids_Tutorial_Cover.jpg
|
||||
:height: 90pt
|
||||
:width: 90pt
|
||||
|
||||
+
|
||||
|
||||
+
|
||||
|
||||
.. tabularcolumns:: m{100pt} m{300pt}
|
||||
.. cssclass:: toctableopencv
|
||||
|
||||
|
||||
===================== ==============================================
|
||||
|Threshold| **Title:** :ref:`Basic_Threshold`
|
||||
|
||||
|
||||
*Compatibility:* > OpenCV 2.0
|
||||
|
||||
|
||||
*Author:* |Author_AnaH|
|
||||
|
||||
|
||||
After so much processing, it is time to decide which pixels stay!
|
||||
|
||||
|
||||
===================== ==============================================
|
||||
|
||||
|
||||
.. |Threshold| image:: images/Threshold_Tutorial_Cover.jpg
|
||||
:height: 90pt
|
||||
:width: 90pt
|
||||
|
||||
|
||||
.. tabularcolumns:: m{100pt} m{300pt}
|
||||
.. cssclass:: toctableopencv
|
||||
|
||||
+
|
||||
|
||||
+
|
||||
===================== ==============================================
|
||||
|Filter_2D| **Title:** :ref:`filter_2d`
|
||||
|
||||
|
||||
*Compatibility:* > OpenCV 2.0
|
||||
|
||||
|
||||
*Author:* |Author_AnaH|
|
||||
|
||||
|
||||
Where we learn to design our own filters by using OpenCV functions
|
||||
|
||||
|
||||
===================== ==============================================
|
||||
|
||||
|
||||
.. |Filter_2D| image:: images/imgtrans/Filter_2D_Tutorial_Cover.jpg
|
||||
:height: 90pt
|
||||
:width: 90pt
|
||||
|
||||
|
||||
.. tabularcolumns:: m{100pt} m{300pt}
|
||||
.. cssclass:: toctableopencv
|
||||
|
||||
+
|
||||
|
||||
+
|
||||
===================== ==============================================
|
||||
|CopyMakeBorder| **Title:** :ref:`copyMakeBorderTutorial`
|
||||
|
||||
|
||||
*Compatibility:* > OpenCV 2.0
|
||||
|
||||
|
||||
*Author:* |Author_AnaH|
|
||||
|
||||
|
||||
Where we learn how to pad our images!
|
||||
|
||||
|
||||
===================== ==============================================
|
||||
|
||||
|
||||
.. |CopyMakeBorder| image:: images/imgtrans/CopyMakeBorder_Tutorial_Cover.jpg
|
||||
:height: 90pt
|
||||
:width: 90pt
|
||||
|
||||
+
|
||||
|
||||
+
|
||||
|
||||
.. tabularcolumns:: m{100pt} m{300pt}
|
||||
.. cssclass:: toctableopencv
|
||||
|
||||
|
||||
===================== ==============================================
|
||||
|SobelDerivatives| **Title:** :ref:`sobel_derivatives`
|
||||
|
||||
|
||||
*Compatibility:* > OpenCV 2.0
|
||||
|
||||
|
||||
*Author:* |Author_AnaH|
|
||||
|
||||
|
||||
Where we learn how to calculate gradients and use them to detect edges!
|
||||
|
||||
|
||||
===================== ==============================================
|
||||
|
||||
|
||||
.. |SobelDerivatives| image:: images/imgtrans/Sobel_Derivatives_Tutorial_Cover.jpg
|
||||
:height: 90pt
|
||||
:width: 90pt
|
||||
|
||||
+
|
||||
|
||||
+
|
||||
|
||||
.. tabularcolumns:: m{100pt} m{300pt}
|
||||
.. cssclass:: toctableopencv
|
||||
|
||||
|
||||
===================== ==============================================
|
||||
|LaplaceOperator| **Title:** :ref:`laplace_operator`
|
||||
|
||||
|
||||
*Compatibility:* > OpenCV 2.0
|
||||
|
||||
|
||||
*Author:* |Author_AnaH|
|
||||
|
||||
|
||||
Where we learn about the *Laplace* operator and how to detect edges with it.
|
||||
|
||||
|
||||
===================== ==============================================
|
||||
|
||||
|
||||
.. |LaplaceOperator| image:: images/imgtrans/Laplace_Operator_Tutorial_Cover.jpg
|
||||
:height: 90pt
|
||||
:width: 90pt
|
||||
|
||||
+
|
||||
|
||||
+
|
||||
|
||||
.. tabularcolumns:: m{100pt} m{300pt}
|
||||
.. cssclass:: toctableopencv
|
||||
|
||||
|
||||
===================== ==============================================
|
||||
|CannyDetector| **Title:** :ref:`canny_detector`
|
||||
|
||||
|
||||
*Compatibility:* > OpenCV 2.0
|
||||
|
||||
|
||||
*Author:* |Author_AnaH|
|
||||
|
||||
|
||||
Where we learn a sophisticated alternative to detect edges.
|
||||
|
||||
|
||||
===================== ==============================================
|
||||
|
||||
|
||||
.. |CannyDetector| image:: images/imgtrans/Canny_Detector_Tutorial_Cover.jpg
|
||||
:height: 90pt
|
||||
:width: 90pt
|
||||
|
||||
+
|
||||
|
||||
+
|
||||
|
||||
.. tabularcolumns:: m{100pt} m{300pt}
|
||||
.. cssclass:: toctableopencv
|
||||
|
||||
|
||||
===================== ==============================================
|
||||
|HoughLines| **Title:** :ref:`hough_lines`
|
||||
|
||||
|
||||
*Compatibility:* > OpenCV 2.0
|
||||
|
||||
|
||||
*Author:* |Author_AnaH|
|
||||
|
||||
|
||||
Where we learn how to detect lines
|
||||
|
||||
|
||||
===================== ==============================================
|
||||
|
||||
|
||||
.. |HoughLines| image:: images/imgtrans/Hough_Lines_Tutorial_Cover.jpg
|
||||
:height: 90pt
|
||||
:width: 90pt
|
||||
|
||||
+
|
||||
|
||||
+
|
||||
|
||||
.. tabularcolumns:: m{100pt} m{300pt}
|
||||
.. cssclass:: toctableopencv
|
||||
|
||||
|
||||
===================== ==============================================
|
||||
|HoughCircle| **Title:** :ref:`hough_circle`
|
||||
|
||||
|
||||
*Compatibility:* > OpenCV 2.0
|
||||
|
||||
|
||||
*Author:* |Author_AnaH|
|
||||
|
||||
|
||||
Where we learn how to detect circles
|
||||
|
||||
|
||||
===================== ==============================================
|
||||
|
||||
|
||||
.. |HoughCircle| image:: images/imgtrans/Hough_Circle_Tutorial_Cover.jpg
|
||||
:height: 90pt
|
||||
:width: 90pt
|
||||
|
||||
+
|
||||
|
||||
+
|
||||
|
||||
.. tabularcolumns:: m{100pt} m{300pt}
|
||||
.. cssclass:: toctableopencv
|
||||
|
||||
|
||||
===================== ==============================================
|
||||
|Remap| **Title:** :ref:`remap`
|
||||
|
||||
|
||||
*Compatibility:* > OpenCV 2.0
|
||||
|
||||
|
||||
*Author:* |Author_AnaH|
|
||||
|
||||
|
||||
Where we learn how to manipulate pixels locations
|
||||
|
||||
|
||||
===================== ==============================================
|
||||
|
||||
|
||||
.. |Remap| image:: images/imgtrans/Remap_Tutorial_Cover.jpg
|
||||
:height: 90pt
|
||||
:width: 90pt
|
||||
|
||||
+
|
||||
|
||||
+
|
||||
|
||||
.. tabularcolumns:: m{100pt} m{300pt}
|
||||
.. cssclass:: toctableopencv
|
||||
|
||||
|
||||
===================== ==============================================
|
||||
|WarpAffine| **Title:** :ref:`warp_affine`
|
||||
|
||||
|
||||
*Compatibility:* > OpenCV 2.0
|
||||
|
||||
|
||||
*Author:* |Author_AnaH|
|
||||
|
||||
|
||||
Where we learn how to rotate, translate and scale our images
|
||||
|
||||
|
||||
===================== ==============================================
|
||||
|
||||
|
||||
.. |WarpAffine| image:: images/imgtrans/Warp_Affine_Tutorial_Cover.jpg
|
||||
:height: 90pt
|
||||
:width: 90pt
|
||||
|
||||
+
|
||||
+
|
||||
|
||||
.. tabularcolumns:: m{100pt} m{300pt}
|
||||
.. cssclass:: toctableopencv
|
||||
|
||||
|
||||
===================== ==============================================
|
||||
|HistEqualization| **Title:** :ref:`histogram_equalization`
|
||||
|
||||
*Compatibility:* > OpenCV 2.0
|
||||
|
||||
|
||||
*Author:* |Author_AnaH|
|
||||
|
||||
Where we learn how to improve the contrast in our images
|
||||
|
||||
===================== ==============================================
|
||||
|
||||
|
||||
.. |HistEqualization| image:: images/histograms/Histogram_Equalization_Tutorial_Cover.jpg
|
||||
:height: 90pt
|
||||
:width: 90pt
|
||||
|
||||
+
|
||||
+
|
||||
|
||||
.. tabularcolumns:: m{100pt} m{300pt}
|
||||
.. cssclass:: toctableopencv
|
||||
|
||||
|
||||
===================== ==============================================
|
||||
|HistCalculation| **Title:** :ref:`histogram_calculation`
|
||||
|
||||
*Compatibility:* > OpenCV 2.0
|
||||
|
||||
|
||||
*Author:* |Author_AnaH|
|
||||
|
||||
Where we learn how to create and generate histograms
|
||||
|
||||
===================== ==============================================
|
||||
|
||||
|
||||
.. |HistCalculation| image:: images/histograms/Histogram_Calculation_Tutorial_Cover.jpg
|
||||
:height: 90pt
|
||||
:width: 90pt
|
||||
|
||||
+
|
||||
+
|
||||
|
||||
.. tabularcolumns:: m{100pt} m{300pt}
|
||||
.. cssclass:: toctableopencv
|
||||
|
||||
|
||||
===================== ==============================================
|
||||
|HistComparison| **Title:** :ref:`histogram_comparison`
|
||||
|
||||
*Compatibility:* > OpenCV 2.0
|
||||
|
||||
|
||||
*Author:* |Author_AnaH|
|
||||
|
||||
Where we learn to calculate metrics between histograms
|
||||
|
||||
===================== ==============================================
|
||||
|
||||
|
||||
.. |HistComparison| image:: images/histograms/Histogram_Comparison_Tutorial_Cover.jpg
|
||||
:height: 90pt
|
||||
:width: 90pt
|
||||
|
||||
+
|
||||
+
|
||||
|
||||
.. tabularcolumns:: m{100pt} m{300pt}
|
||||
.. cssclass:: toctableopencv
|
||||
|
||||
|
||||
===================== ==============================================
|
||||
|BackProjection| **Title:** :ref:`back_projection`
|
||||
|
||||
*Compatibility:* > OpenCV 2.0
|
||||
|
||||
|
||||
*Author:* |Author_AnaH|
|
||||
|
||||
Where we learn how to use histograms to find similar objects in images
|
||||
|
||||
===================== ==============================================
|
||||
|
||||
|
||||
.. |BackProjection| image:: images/histograms/Back_Projection_Tutorial_Cover.jpg
|
||||
:height: 90pt
|
||||
:width: 90pt
|
||||
|
||||
+
|
||||
+
|
||||
|
||||
.. tabularcolumns:: m{100pt} m{300pt}
|
||||
.. cssclass:: toctableopencv
|
||||
|
||||
|
||||
===================== ==============================================
|
||||
|TemplateMatching| **Title:** :ref:`template_matching`
|
||||
|
||||
*Compatibility:* > OpenCV 2.0
|
||||
|
||||
|
||||
*Author:* |Author_AnaH|
|
||||
|
||||
Where we learn how to match templates in an image
|
||||
|
||||
===================== ==============================================
|
||||
|
||||
|
||||
.. |TemplateMatching| image:: images/histograms/Template_Matching_Tutorial_Cover.jpg
|
||||
:height: 90pt
|
||||
:width: 90pt
|
||||
|
||||
+
|
||||
+
|
||||
|
||||
.. tabularcolumns:: m{100pt} m{300pt}
|
||||
.. cssclass:: toctableopencv
|
||||
|
||||
|
||||
===================== ==============================================
|
||||
|FindContours| **Title:** :ref:`find_contours`
|
||||
|
||||
*Compatibility:* > OpenCV 2.0
|
||||
|
||||
|
||||
*Author:* |Author_AnaH|
|
||||
|
||||
Where we learn how to find contours of objects in our image
|
||||
|
||||
===================== ==============================================
|
||||
|
||||
|
||||
.. |FindContours| image:: images/shapedescriptors/Find_Contours_Tutorial_Cover.jpg
|
||||
:height: 90pt
|
||||
:width: 90pt
|
||||
|
||||
+
|
||||
+
|
||||
|
||||
.. tabularcolumns:: m{100pt} m{300pt}
|
||||
.. cssclass:: toctableopencv
|
||||
|
||||
|
||||
===================== ==============================================
|
||||
|Hull| **Title:** :ref:`hull`
|
||||
|
||||
*Compatibility:* > OpenCV 2.0
|
||||
|
||||
|
||||
*Author:* |Author_AnaH|
|
||||
|
||||
Where we learn how to get hull contours and draw them!
|
||||
|
||||
===================== ==============================================
|
||||
|
||||
|
||||
.. |Hull| image:: images/shapedescriptors/Hull_Tutorial_Cover.jpg
|
||||
:height: 90pt
|
||||
:width: 90pt
|
||||
|
||||
+
|
||||
+
|
||||
|
||||
.. tabularcolumns:: m{100pt} m{300pt}
|
||||
.. cssclass:: toctableopencv
|
||||
|
||||
|
||||
===================== ==============================================
|
||||
|BRC| **Title:** :ref:`bounding_rects_circles`
|
||||
|
||||
*Compatibility:* > OpenCV 2.0
|
||||
|
||||
|
||||
*Author:* |Author_AnaH|
|
||||
|
||||
Where we learn how to obtain bounding boxes and circles for our contours.
|
||||
|
||||
===================== ==============================================
|
||||
|
||||
|
||||
.. |BRC| image:: images/shapedescriptors/Bounding_Rects_Circles_Tutorial_Cover.jpg
|
||||
:height: 90pt
|
||||
:width: 90pt
|
||||
|
||||
+
|
||||
+
|
||||
|
||||
.. tabularcolumns:: m{100pt} m{300pt}
|
||||
.. cssclass:: toctableopencv
|
||||
|
||||
|
||||
|
||||
|
||||
===================== ==============================================
|
||||
|BRE| **Title:** :ref:`bounding_rotated_ellipses`
|
||||
|
||||
*Compatibility:* > OpenCV 2.0
|
||||
|
||||
|
||||
*Author:* |Author_AnaH|
|
||||
|
||||
Where we learn how to obtain rotated bounding boxes and ellipses for our contours.
|
||||
|
||||
===================== ==============================================
|
||||
|
||||
|
||||
.. |BRE| image:: images/shapedescriptors/Bounding_Rotated_Ellipses_Tutorial_Cover.jpg
|
||||
:height: 90pt
|
||||
:width: 90pt
|
||||
|
||||
+
|
||||
+
|
||||
|
||||
.. tabularcolumns:: m{100pt} m{300pt}
|
||||
.. cssclass:: toctableopencv
|
||||
|
||||
|
||||
|
||||
|
||||
===================== ==============================================
|
||||
|MU| **Title:** :ref:`moments`
|
||||
|
||||
*Compatibility:* > OpenCV 2.0
|
||||
|
||||
|
||||
*Author:* |Author_AnaH|
|
||||
|
||||
Where we learn to calculate the moments of an image
|
||||
|
||||
===================== ==============================================
|
||||
|
||||
|
||||
.. |MU| image:: images/shapedescriptors/Moments_Tutorial_Cover.jpg
|
||||
:height: 90pt
|
||||
:width: 90pt
|
||||
|
||||
|
||||
+
|
||||
+
|
||||
|
||||
.. tabularcolumns:: m{100pt} m{300pt}
|
||||
.. cssclass:: toctableopencv
|
||||
|
||||
|
||||
|
||||
|
||||
===================== ==============================================
|
||||
|PPT| **Title:** :ref:`point_polygon_test`
|
||||
|
||||
*Compatibility:* > OpenCV 2.0
|
||||
|
||||
|
||||
*Author:* |Author_AnaH|
|
||||
|
||||
Where we learn how to calculate distances from the image to contours
|
||||
|
||||
===================== ==============================================
|
||||
|
||||
|
||||
.. |PPT| image:: images/shapedescriptors/Point_Polygon_Test_Tutorial_Cover.jpg
|
||||
:height: 90pt
|
||||
:width: 90pt
|
||||
|
||||
@@ -174,12 +174,12 @@ The tutorial code's is shown lines below. You can also download it from `here <h
|
||||
|
||||
/// Create Trackbar to choose type of Threshold
|
||||
createTrackbar( trackbar_type,
|
||||
window_name, &threshold_type,
|
||||
max_type, Threshold_Demo );
|
||||
window_name, &threshold_type,
|
||||
max_type, Threshold_Demo );
|
||||
|
||||
createTrackbar( trackbar_value,
|
||||
window_name, &threshold_value,
|
||||
max_value, Threshold_Demo );
|
||||
window_name, &threshold_value,
|
||||
max_value, Threshold_Demo );
|
||||
|
||||
/// Call the function to initialize
|
||||
Threshold_Demo( 0, 0 );
|
||||
@@ -190,7 +190,7 @@ The tutorial code's is shown lines below. You can also download it from `here <h
|
||||
int c;
|
||||
c = waitKey( 20 );
|
||||
if( (char)c == 27 )
|
||||
{ break; }
|
||||
{ break; }
|
||||
}
|
||||
|
||||
}
|
||||
@@ -245,12 +245,12 @@ Explanation
|
||||
.. code-block:: cpp
|
||||
|
||||
createTrackbar( trackbar_type,
|
||||
window_name, &threshold_type,
|
||||
max_type, Threshold_Demo );
|
||||
window_name, &threshold_type,
|
||||
max_type, Threshold_Demo );
|
||||
|
||||
createTrackbar( trackbar_value,
|
||||
window_name, &threshold_value,
|
||||
max_value, Threshold_Demo );
|
||||
window_name, &threshold_value,
|
||||
max_value, Threshold_Demo );
|
||||
|
||||
* Wait until the user enters the threshold value, the type of thresholding (or until the program exits)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user