Home | History | Annotate | Download | only in ImgProc
      1 /**
      2  * file Smoothing.cpp
      3  * brief Sample code for simple filters
      4  * author OpenCV team
      5  */
      6 #include <iostream>
      7 #include <vector>
      8 
      9 #include "opencv2/imgproc/imgproc.hpp"
     10 #include "opencv2/imgcodecs.hpp"
     11 #include "opencv2/highgui/highgui.hpp"
     12 #include "opencv2/features2d/features2d.hpp"
     13 
     14 using namespace std;
     15 using namespace cv;
     16 
     17 /// Global Variables
     18 int DELAY_CAPTION = 1500;
     19 int DELAY_BLUR = 100;
     20 int MAX_KERNEL_LENGTH = 31;
     21 
     22 Mat src; Mat dst;
     23 char window_name[] = "Smoothing Demo";
     24 
     25 /// Function headers
     26 int display_caption( const char* caption );
     27 int display_dst( int delay );
     28 
     29 
     30 /**
     31  * function main
     32  */
     33 int main( void )
     34 {
     35   namedWindow( window_name, WINDOW_AUTOSIZE );
     36 
     37   /// Load the source image
     38   src = imread( "../data/lena.jpg", 1 );
     39 
     40   if( display_caption( "Original Image" ) != 0 ) { return 0; }
     41 
     42   dst = src.clone();
     43   if( display_dst( DELAY_CAPTION ) != 0 ) { return 0; }
     44 
     45 
     46   /// Applying Homogeneous blur
     47   if( display_caption( "Homogeneous Blur" ) != 0 ) { return 0; }
     48 
     49   for ( int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2 )
     50       { blur( src, dst, Size( i, i ), Point(-1,-1) );
     51         if( display_dst( DELAY_BLUR ) != 0 ) { return 0; } }
     52 
     53 
     54   /// Applying Gaussian blur
     55   if( display_caption( "Gaussian Blur" ) != 0 ) { return 0; }
     56 
     57   for ( int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2 )
     58       { GaussianBlur( src, dst, Size( i, i ), 0, 0 );
     59         if( display_dst( DELAY_BLUR ) != 0 ) { return 0; } }
     60 
     61 
     62   /// Applying Median blur
     63   if( display_caption( "Median Blur" ) != 0 ) { return 0; }
     64 
     65   for ( int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2 )
     66       { medianBlur ( src, dst, i );
     67         if( display_dst( DELAY_BLUR ) != 0 ) { return 0; } }
     68 
     69 
     70   /// Applying Bilateral Filter
     71   if( display_caption( "Bilateral Blur" ) != 0 ) { return 0; }
     72 
     73   for ( int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2 )
     74       { bilateralFilter ( src, dst, i, i*2, i/2 );
     75         if( display_dst( DELAY_BLUR ) != 0 ) { return 0; } }
     76 
     77   /// Wait until user press a key
     78   display_caption( "End: Press a key!" );
     79 
     80   waitKey(0);
     81 
     82   return 0;
     83 }
     84 
     85 /**
     86  * @function display_caption
     87  */
     88 int display_caption( const char* caption )
     89 {
     90   dst = Mat::zeros( src.size(), src.type() );
     91   putText( dst, caption,
     92            Point( src.cols/4, src.rows/2),
     93            FONT_HERSHEY_COMPLEX, 1, Scalar(255, 255, 255) );
     94 
     95   imshow( window_name, dst );
     96   int c = waitKey( DELAY_CAPTION );
     97   if( c >= 0 ) { return -1; }
     98   return 0;
     99 }
    100 
    101 /**
    102  * @function display_dst
    103  */
    104 int display_dst( int delay )
    105 {
    106   imshow( window_name, dst );
    107   int c = waitKey ( delay );
    108   if( c >= 0 ) { return -1; }
    109   return 0;
    110 }
    111