123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- /**
- * file Smoothing.cpp
- * brief Sample code for simple filters
- * author OpenCV team
- */
- #include <iostream>
- #include "opencv2/imgproc.hpp"
- #include "opencv2/imgcodecs.hpp"
- #include "opencv2/highgui.hpp"
- using namespace std;
- using namespace cv;
- /// Global Variables
- int DELAY_CAPTION = 1500;
- int DELAY_BLUR = 100;
- int MAX_KERNEL_LENGTH = 31;
- Mat src; Mat dst;
- char window_name[] = "Smoothing Demo";
- /// Function headers
- int display_caption( const char* caption );
- int display_dst( int delay );
- /**
- * function main
- */
- int main( int argc, char ** argv )
- {
- namedWindow( window_name, WINDOW_AUTOSIZE );
- /// Load the source image
- const char* filename = argc >=2 ? argv[1] : "lena.jpg";
- src = imread( samples::findFile( filename ), IMREAD_COLOR );
- if (src.empty())
- {
- printf(" Error opening image\n");
- printf(" Usage:\n %s [image_name-- default lena.jpg] \n", argv[0]);
- return EXIT_FAILURE;
- }
- if( display_caption( "Original Image" ) != 0 )
- {
- return 0;
- }
- dst = src.clone();
- if( display_dst( DELAY_CAPTION ) != 0 )
- {
- return 0;
- }
- /// Applying Homogeneous blur
- if( display_caption( "Homogeneous Blur" ) != 0 )
- {
- return 0;
- }
- //![blur]
- for ( int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2 )
- {
- blur( src, dst, Size( i, i ), Point(-1,-1) );
- if( display_dst( DELAY_BLUR ) != 0 )
- {
- return 0;
- }
- }
- //![blur]
- /// Applying Gaussian blur
- if( display_caption( "Gaussian Blur" ) != 0 )
- {
- return 0;
- }
- //![gaussianblur]
- for ( int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2 )
- {
- GaussianBlur( src, dst, Size( i, i ), 0, 0 );
- if( display_dst( DELAY_BLUR ) != 0 )
- {
- return 0;
- }
- }
- //![gaussianblur]
- /// Applying Median blur
- if( display_caption( "Median Blur" ) != 0 )
- {
- return 0;
- }
- //![medianblur]
- for ( int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2 )
- {
- medianBlur ( src, dst, i );
- if( display_dst( DELAY_BLUR ) != 0 )
- {
- return 0;
- }
- }
- //![medianblur]
- /// Applying Bilateral Filter
- if( display_caption( "Bilateral Blur" ) != 0 )
- {
- return 0;
- }
- //![bilateralfilter]
- 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;
- }
- }
- //![bilateralfilter]
- /// Done
- display_caption( "Done!" );
- return 0;
- }
- /**
- * @function display_caption
- */
- int display_caption( const char* caption )
- {
- dst = Mat::zeros( src.size(), src.type() );
- putText( dst, caption,
- Point( src.cols/4, src.rows/2),
- FONT_HERSHEY_COMPLEX, 1, Scalar(255, 255, 255) );
- return display_dst(DELAY_CAPTION);
- }
- /**
- * @function display_dst
- */
- int display_dst( int delay )
- {
- imshow( window_name, dst );
- int c = waitKey ( delay );
- if( c >= 0 ) { return -1; }
- return 0;
- }
|