1 /**
2 * @file Morphology_1.cpp
3 * @brief Erosion and Dilation sample code
4 * @author OpenCV team
5 */
6
7 #include "opencv2/imgproc/imgproc.hpp"
8 #include "opencv2/imgcodecs.hpp"
9 #include "opencv2/highgui/highgui.hpp"
10 #include <stdlib.h>
11 #include <stdio.h>
12
13 using namespace cv;
14
15 /// Global variables
16 Mat src, erosion_dst, dilation_dst;
17
18 int erosion_elem = 0;
19 int erosion_size = 0;
20 int dilation_elem = 0;
21 int dilation_size = 0;
22 int const max_elem = 2;
23 int const max_kernel_size = 21;
24
25 /** Function Headers */
26 void Erosion( int, void* );
27 void Dilation( int, void* );
28
29 /**
30 * @function main
31 */
main(int,char ** argv)32 int main( int, char** argv )
33 {
34 /// Load an image
35 src = imread( argv[1] );
36
37 if( src.empty() )
38 { return -1; }
39
40 /// Create windows
41 namedWindow( "Erosion Demo", WINDOW_AUTOSIZE );
42 namedWindow( "Dilation Demo", WINDOW_AUTOSIZE );
43 moveWindow( "Dilation Demo", src.cols, 0 );
44
45 /// Create Erosion Trackbar
46 createTrackbar( "Element:\n 0: Rect \n 1: Cross \n 2: Ellipse", "Erosion Demo",
47 &erosion_elem, max_elem,
48 Erosion );
49
50 createTrackbar( "Kernel size:\n 2n +1", "Erosion Demo",
51 &erosion_size, max_kernel_size,
52 Erosion );
53
54 /// Create Dilation Trackbar
55 createTrackbar( "Element:\n 0: Rect \n 1: Cross \n 2: Ellipse", "Dilation Demo",
56 &dilation_elem, max_elem,
57 Dilation );
58
59 createTrackbar( "Kernel size:\n 2n +1", "Dilation Demo",
60 &dilation_size, max_kernel_size,
61 Dilation );
62
63 /// Default start
64 Erosion( 0, 0 );
65 Dilation( 0, 0 );
66
67 waitKey(0);
68 return 0;
69 }
70
71 /**
72 * @function Erosion
73 */
Erosion(int,void *)74 void Erosion( int, void* )
75 {
76 int erosion_type = 0;
77 if( erosion_elem == 0 ){ erosion_type = MORPH_RECT; }
78 else if( erosion_elem == 1 ){ erosion_type = MORPH_CROSS; }
79 else if( erosion_elem == 2) { erosion_type = MORPH_ELLIPSE; }
80
81 Mat element = getStructuringElement( erosion_type,
82 Size( 2*erosion_size + 1, 2*erosion_size+1 ),
83 Point( erosion_size, erosion_size ) );
84 /// Apply the erosion operation
85 erode( src, erosion_dst, element );
86 imshow( "Erosion Demo", erosion_dst );
87 }
88
89 /**
90 * @function Dilation
91 */
Dilation(int,void *)92 void Dilation( int, void* )
93 {
94 int dilation_type = 0;
95 if( dilation_elem == 0 ){ dilation_type = MORPH_RECT; }
96 else if( dilation_elem == 1 ){ dilation_type = MORPH_CROSS; }
97 else if( dilation_elem == 2) { dilation_type = MORPH_ELLIPSE; }
98
99 Mat element = getStructuringElement( dilation_type,
100 Size( 2*dilation_size + 1, 2*dilation_size+1 ),
101 Point( dilation_size, dilation_size ) );
102 /// Apply the dilation operation
103 dilate( src, dilation_dst, element );
104 imshow( "Dilation Demo", dilation_dst );
105 }
106