【OpenCV笔记 10】OpenCV线性滤波(均值滤波、方框滤波、高斯滤波)
2016-07-18 16:28
447 查看
本文将介绍三种常见的线性滤:均值滤波、方框滤波、高斯滤波
1.均值滤波
blur()函数原型
注:
2.方框滤波:用来模糊一张图片
boxFilter()函数原型
3.高斯滤波:将原图像和指定的高斯核函数做卷积运算,以消除高斯噪声
GaussianBlur()函数原型
4.代码示例
5.运行结果
控制台:
![](http://img.blog.csdn.net/20160718225157623?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
原图:
![](http://img.blog.csdn.net/20160718225316248?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
均值滤波,内核值为7+1:
![](http://img.blog.csdn.net/20160718225322108?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
方框滤波,内核值为7+1:
![](http://img.blog.csdn.net/20160718225328718?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
高斯滤波,内核值为2x7+1:
1.均值滤波
blur()函数原型
void cv::blur | ( | InputArray | src, //输入 |
OutputArray | dst,//输出 | ||
Size | ksize,//模板大小3x3,5x5等,Size(3,3),Size(5,5) | ||
Point | anchor = Point(-1,-1),//默认为Point(-1,-1),则为3x3模板的中心点 | ||
int | borderType = BORDER_DEFAULT//用于推断外部边界像素的某种模式 | ||
) |
blur(src, dst, ksize, anchor, borderType)等价于
boxFilter(src, dst, src.type(), anchor, true, borderType)
2.方框滤波:用来模糊一张图片
boxFilter()函数原型
void cv::boxFilter | ( | InputArray | src,//输入 |
OutputArray | dst,//输出 | ||
int | ddepth,//输出图像的深度,-1表示原图深度 | ||
Size | ksize,//模板大小3x3,5x5等,Size(3,3),Size(5,5) | ||
Point | anchor = Point(-1,-1), //默认为Point(-1,-1),则为3x3模板的中心点 | ||
bool | normalize = true, //默认为true,表示其内核是否其区域归一化 | ||
int | borderType = BORDER_DEFAULT//此参数可以不用设置 | ||
) |
GaussianBlur()函数原型
void cv::GaussianBlur | ( | InputArray | src, //输入 |
OutputArray | dst, //输出 | ||
Size | ksize,//模板(内核)大小 | ||
double | sigmaX,//高斯内核函数在x方向偏差 | ||
double | sigmaY = 0,//高斯内核函数在x方向偏差 | ||
int | borderType = BORDER_DEFAULT//此参数可不用设置 | ||
) |
//三种常见的线性滤综合运用示例: //均值滤波blur()、方框滤波boxFilter() , 高斯滤波 GaussianBlur() //使用到的其它函数回调函数、创建滑动条createTrackbar() //头文件、命名空间 #include<opencv2/core/core.hpp> #include<opencv2/highgui/highgui.hpp> #include<opencv2/imgproc/imgproc.hpp> #include<iostream> using namespace std; using namespace cv; //全局变量声明 Mat g_srcImage, g_dstImage1, g_dstImage3, g_dstImage2; int g_nBoxFilterValue = 3;//方框滤波参数值 int g_nBlurValue = 3; int g_nGaussianFilterValue=3; //全局函数声明部分,轨迹条的回调函数 static void on_BoxFilter(int, void *); static void on_Blur(int, void*); static void on_Gaussian(int, void*); //main()函数部分 int main() { system("color E0");//改变控制台颜色,背景为黄色,字体为黑色 g_srcImage = imread("623.jpg",1); if (!g_srcImage.data) { printf("读取srcImage错误!\n"); return false; } imshow("【0】原图", g_srcImage); g_dstImage1 = g_srcImage.clone(); g_dstImage2 = g_srcImage.clone(); g_dstImage3 = g_srcImage.clone(); //****************均值滤波*************** namedWindow("【1】均值滤波", 1);//创建滑动条,该句不可少 createTrackbar("内核值", "【1】均值滤波", &g_nBlurValue, 20, on_Blur);//滑动条最大位置为20+1,on_Blur为函数名,此处以指针形式作为参数 on_Blur(g_nBlurValue, 0);//回调函数 //**************方框滤波**************** namedWindow("【2】方框滤波",CV_WINDOW_AUTOSIZE); createTrackbar("内核值", "【2】方框滤波", &g_nBoxFilterValue, 20, on_BoxFilter); on_BoxFilter(g_nBoxFilterValue, 0); //***************高斯滤波*************** namedWindow("【3】高斯滤波", 1); createTrackbar("内核值", "【3】高斯滤波", &g_nGaussianFilterValue, 15, on_Gaussian); on_Gaussian(g_nBlurValue, 0); cout << "\t请拖动滚动条观察图像效果!\n"; cout << "\t按下q键退出\n" << endl; while (char (waitKey(1))!= 'q') { } return 0; } //自定义回调函数 static void on_Blur(int , void*) { blur(g_srcImage, g_dstImage1, Size(g_nBlurValue+1, g_nBlurValue+1), Point(-1, -1)); imshow("【1】均值滤波", g_dstImage1); } static void on_BoxFilter(int, void*) { boxFilter(g_srcImage, g_dstImage2, -1, Size(g_nBoxFilterValue+1, g_nBoxFilterValue+1), Point(-1, -1), true, 4); imshow("【2】方框滤波", g_dstImage2); } static void on_Gaussian(int, void*) { GaussianBlur(g_srcImage, g_dstImage3, Size(2 * g_nGaussianFilterValue + 1, 2 * g_nGaussianFilterValue+1), 0, 0, 4); imshow("【3】高斯滤波", g_dstImage3); }**********************************
5.运行结果
控制台:
原图:
均值滤波,内核值为7+1:
方框滤波,内核值为7+1:
高斯滤波,内核值为2x7+1:
相关文章推荐
- Mootools 1.2教程 函数
- autoit InputBox 函数
- 文件遍历排序函数
- 关于C#中排序函数的总结
- Oracle 函数大全[字符串函数,数学函数,日期函数]第1/4页
- ASP下经常用的字符串等函数参考资料
- PostgreSQL教程(五):函数和操作符详解(1)
- DOS批处理 函数定义与用法
- asp Chr 函数 数字转字母的方法
- Lua中的函数精讲笔记
- Lua中的闭合函数、非全局函数与函数的尾调用详解
- Lua中调用C++函数示例
- Lua实现split函数
- Lua常用时间函数使用实例
- Lua函数与字符串处理简明总结
- Lua学习笔记之表和函数
- Lua中实现sleep函数功能的4种方法
- Lua函数用法研究
- Lua基础教程之赋值语句、表达式、流程控制、函数学习笔记
- Sql Server中REPLACE函数的使用