赞
踩
10. Smoothing.cpp 图像平滑处理
演示不同滤波器的效果。这些滤波器包括均值滤波、高斯滤波、中值滤波和双边滤波。每个滤波器都会在原始图像上应用,并显示滤波后的效果。
- /**
- * 文件 Smoothing.cpp
- * 简单滤镜的样例代码
- * 作者 OpenCV团队
- */
-
-
- //引入所需库文件
- #include <iostream>
- #include "opencv2/imgproc.hpp"
- #include "opencv2/imgcodecs.hpp"
- #include "opencv2/highgui.hpp"
-
-
- using namespace std;
- using namespace cv;
-
-
- //定义一些全局变量
- int DELAY_CAPTION = 1500; //延迟时间
- int DELAY_BLUR = 100; //模糊延迟时间
- int MAX_KERNEL_LENGTH = 31; //最大滤镜核心大小
-
-
- Mat src; Mat dst; // 定义两个Mat变量,src存储原始图像,dst用于存储处理后的图像
- char window_name[] = "Smoothing Demo"; //程序窗口的名字
-
-
- //函数声明
- int display_caption( const char* caption ); //显示文字
- int display_dst( int delay ); //显示图片
-
-
- /**
- * 主函数
- */
- int main( int argc, char ** argv )
- {
- //创建一个窗口
- namedWindow( window_name, WINDOW_AUTOSIZE );
-
-
- //载入原始图像
- const char* filename = argc >=2 ? argv[1] : "lena.jpg"; //如果用户没有输入,则默认打开lena.jpg
-
-
- src = imread( samples::findFile( filename ), IMREAD_COLOR ); //使用imread函数读取图像文件
- if (src.empty())
- {
- printf(" Error opening imagen\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(); //克隆src到dst
- 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 ), Point(-1,-1) );
- 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, 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( "Done!" );
-
-
- return 0;
- }
-
-
- /**
- * @function display_caption 显示标题函数
- */
- int display_caption( const char* caption )
- {
- dst = Mat::zeros( src.size(), src.type() ); //暂时将dst置为src相同大小的全零矩阵
- putText( dst, caption,
- Point( src.cols/4, src.rows/2),
- FONT_HERSHEY_COMPLEX, 1, Scalar(255, 255, 255) ); //将标题文字写入dst图片中
-
-
- return display_dst(DELAY_CAPTION); //显示dst图片
- }
-
-
- /**
- * @function display_dst 显示dst图片函数
- */
- int display_dst( int delay )
- {
- imshow( window_name, dst ); //显示窗口中的dst图片
- int c = waitKey ( delay ); //等待按键事件
- if( c >= 0 ) { return -1; } //如果有按键输入,则返回-1
- return 0; //否则返回0
- }
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。