#include "stdafx.h"
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
using namespace cv;
//全局變量
int DELAY_CAPTION = 1500;
int DELAY_BLUR = 100;
int MAX_KERNEL_LENGTH = 31;
Mat src, dst;
char window_name[] = "Filter Demo 1";
int display_caption( char* caption )
{
dst = Mat::zeros( src.size(), src.type() );
putText( dst,
caption,
Point( src.cols/6, src.rows/2 ),
CV_FONT_HERSHEY_COMPLEX,
1,
Scalar( 255, 255, 255 ) );
imshow( window_name, dst );
int c = waitKey( DELAY_CAPTION );
if ( c >= 0 )
{
return -1;
}
return 0;
}
int display_dst( int delay )
{
imshow( window_name, dst );
int c = waitKey( delay );
if ( c >= 0 )
{
return -1;
}
return 0;
}
//Main 函數
int main( int argc, char** argv )
{
namedWindow( window_name, CV_WINDOW_AUTOSIZE );
//讀取圖像
src = imread( "D:\\image\\aa.jpg" );
if ( display_caption( "Original Image" ) != 0 )
{
return 0;
}
dst = src.clone();
if ( display_dst( DELAY_CAPTION ) != 0 )
{
return 0;
}
//均值模糊
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 ) );
if ( display_dst( DELAY_BLUR ) != 0 )
{
return 0;
}
}
//高斯模糊
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);
if ( display_dst( DELAY_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 );
if ( display_dst( DELAY_BLUR ) != 0 )
{
return 0;
}
}
//雙邊濾波
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);
if ( display_dst( DELAY_BLUR ) != 0 )
{
return 0;
}
}
display_caption( "End: Press a key!" );
return 0;
}
OpenCV自帶例子(七)圖像平滑處理
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.