samples/cpp/tutorial_code/ImgProc/Smoothing/Smoothing.cpp#
Sample code for simple filters 
Check the corresponding tutorial for more details
1/**
2 * file Smoothing.cpp
3 * brief Sample code for simple filters
4 * author OpenCV team
5 */
6
7#include <iostream>
8#include "opencv2/imgproc.hpp"
9#include "opencv2/imgcodecs.hpp"
10#include "opencv2/highgui.hpp"
11
12using namespace std;
13using namespace cv;
14
15/// Global Variables
16int DELAY_CAPTION = 1500;
17int DELAY_BLUR = 100;
18int MAX_KERNEL_LENGTH = 31;
19
20Mat src; Mat dst;
21char window_name[] = "Smoothing Demo";
22
23/// Function headers
24int display_caption( const char* caption );
25int display_dst( int delay );
26
27
28/**
29 * function main
30 */
31int main( int argc, char ** argv )
32{
33 namedWindow( window_name, WINDOW_AUTOSIZE );
34
35 /// Load the source image
36 const char* filename = argc >=2 ? argv[1] : "lena.jpg";
37
38 src = imread( samples::findFile( filename ), IMREAD_COLOR );
39 if (src.empty())
40 {
41 printf(" Error opening image\n");
42 printf(" Usage:\n %s [image_name-- default lena.jpg] \n", argv[0]);
43 return EXIT_FAILURE;
44 }
45
46 if( display_caption( "Original Image" ) != 0 )
47 {
48 return 0;
49 }
50
51 dst = src.clone();
52 if( display_dst( DELAY_CAPTION ) != 0 )
53 {
54 return 0;
55 }
56
57 /// Applying Homogeneous blur
58 if( display_caption( "Homogeneous Blur" ) != 0 )
59 {
60 return 0;
61 }
62
63 //![blur]
64 for ( int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2 )
65 {
66 blur( src, dst, Size( i, i ), Point(-1,-1) );
67 if( display_dst( DELAY_BLUR ) != 0 )
68 {
69 return 0;
70 }
71 }
72 //![blur]
73
74 /// Applying Gaussian blur
75 if( display_caption( "Gaussian Blur" ) != 0 )
76 {
77 return 0;
78 }
79
80 //![gaussianblur]
81 for ( int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2 )
82 {
83 GaussianBlur( src, dst, Size( i, i ), 0, 0 );
84 if( display_dst( DELAY_BLUR ) != 0 )
85 {
86 return 0;
87 }
88 }
89 //![gaussianblur]
90
91 /// Applying Median blur
92 if( display_caption( "Median Blur" ) != 0 )
93 {
94 return 0;
95 }
96
97 //![medianblur]
98 for ( int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2 )
99 {
100 medianBlur ( src, dst, i );
101 if( display_dst( DELAY_BLUR ) != 0 )
102 {
103 return 0;
104 }
105 }
106 //![medianblur]
107
108 /// Applying Bilateral Filter
109 if( display_caption( "Bilateral Blur" ) != 0 )
110 {
111 return 0;
112 }
113
114 //![bilateralfilter]
115 for ( int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2 )
116 {
117 bilateralFilter ( src, dst, i, i*2, i/2 );
118 if( display_dst( DELAY_BLUR ) != 0 )
119 {
120 return 0;
121 }
122 }
123 //![bilateralfilter]
124
125 /// Done
126 display_caption( "Done!" );
127
128 return 0;
129}
130
131/**
132 * @function display_caption
133 */
134int display_caption( const char* caption )
135{
136 dst = Mat::zeros( src.size(), src.type() );
137 putText( dst, caption,
138 Point( src.cols/4, src.rows/2),
139 FONT_HERSHEY_COMPLEX, 1, Scalar(255, 255, 255) );
140
141 return display_dst(DELAY_CAPTION);
142}
143
144/**
145 * @function display_dst
146 */
147int display_dst( int delay )
148{
149 imshow( window_name, dst );
150 int c = waitKey ( delay );
151 if( c >= 0 ) { return -1; }
152 return 0;
153}