opencv中的各种滤波函数
2016-07-17 03:42
337 查看
线性滤波
方框滤波void boxFilter(InputArray src, OutputArray, dst, int ddepth, Size ksize, Point Anchor = Point(-1, -1), bool normalize = true, int borderType = BORDER_DEFAULT)
第一个参数 输入
第二个参数 输出
第三个参数 输出图像深度,为负时(-1)时表示和源图像一致
第四个参数 内核大小
后面的参数用默认即可
第五个参数 锚点坐标,如果都为负(Point(-1,-1)),即取内核中点为锚点
第六个参数 归一化
第七个参数 边界类型,取BORDER_DEFAULT即可
均值滤波
void blur(InputArray src, OutputArray, Size ksize, Point Anchor = Point(-1, -1), int borderType = BORDER_DEFAULT)
第一个参数 输入
第二个参数 输出
第三个参数 内核大小
后面的参数用默认即可
第四个参数 锚点坐标,如果都为负(Point(-1,-1)),即取内核中点为锚点
第五个参数 边界类型,取BORDER_DEFAULT即可
blur是特殊的boxFilter, ddepth取-1, normalize取true
高斯滤波
void GaussianBlurr(InputArray src, OutputArray, Size ksize, double sigmaX, double sigmaY = 0, int borderType = BORDER_DEFAULT)
第一个参数 输入
第二个参数 输出
第三个参数 内核大小
第四个参数 核函数X方向上的偏差(???),
第五个参数 核函数Y方向上的偏差(???),默认为0,
当这个值为0,前一个参数sigmaX不为0时,自动把这个值设为和sigmaX一样的值,
如果sigmaX和sigmaY均为0时,会自动通过ksize.width和ksize.height计算sigmaX和sigmaY
后面的参数用默认即可
第六个参数 边界类型,取BORDER_DEFAULT即可
非线性滤波操作
中值滤波medianBlur(InputArray src, OutputArray dst, int ksize)
第一个参数 输入
第二个参数 输出
第三个参数 孔径大小
中值滤波就是将每一个点的灰度值设为在它周围一个区域内的所有点灰度值的中间值
首先是排序它和它周围点的灰度值,然后找到中间值,最后修改,所以一般孔径大小取奇数,方便取值,为偶数时区中间两个的平均值
双边滤波
void bilateralFilter(InputArray src, OutputArray dst, int d, double sigmaColor, double sigmaSpace, int borderType = BORDER_DEFAULT)第一个参数 输入
第二个参数 输出
第三个参数 孔径大小 当d<=0时,会自动通过第五个参数sigmaSpace来计算d值,此时与sigmaSpace成正比
第四个参数 不同颜色混合程度,这个值越大,越宽广的颜色会被混到一起
第五个参数 像素之间的影响程度,这个值越大,距离越远的像素的会相互影响
例子
#include <core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> using namespace cv; void on_GaussianBlur(int, void*); int g_coreValue=0; Mat ma1; Mat ma2; Mat ma3; Mat ma4; Mat ma5; Mat ma6; int main() { ma1 = imread("1.png"); //读入要操作的图像 imshow("im1", ma1); boxFilter(ma1, ma2, -1, Size(5,5)); //方框滤波操作 imshow("im2", ma2); blur(ma1, ma3, Size(7, 7)); //均值滤波 imshow("im3", ma3); GaussianBlur(ma1, ma4, Size(7, 7), 0, 0); //高斯滤波 imshow("im4", ma4); createTrackbar("内核值", "im4", &g_coreValue, 100, on_GaussianBlur); //为高斯滤波创建动态滑动条,可以动态观察 medianBlur(ma1, ma5, 5); //中值滤波 imshow("im5", ma5); bilateralFilter(ma1, ma6, 25, 100, 25/2); //双边滤波 imshow("im6", ma6); while (waitKey(10) != 27); return 0; } void on_GaussianBlur(int, void*) { GaussianBlur(ma1, ma4, Size(g_coreValue * 2 + 1, g_coreValue * 2 + 1), 0, 0); imshow("im4", ma4); }
相关文章推荐
- Linux常用命令
- Devstack多节点部署实验
- ubuntu系统备份与恢复(也适用于其他linux系统)
- Tomcat上3种部署web项目的方法
- 动画演示10个超有趣的Linux命令
- Linux--struct file结构体
- IntelliJ IDEA 14.x 与 Tomcat 集成,创建并运行Java Web项目
- Hadoop笔记三之Hdfs体系架构及各节点之间的Rpc通信
- linux C 打印错误信息和标准输入输出
- Linux 新建用户、用户组,给用户分配权限(chown、useradd、groupadd、userdel、usermod、passwd、groupdel)
- nginx php问题集
- apache禁止访问文件或目录执行权限、禁止运行脚本PHP文件的设置方法
- Linux-信号机制详解(一)
- Linux Nginx
- 启动tomcat报错 java.lang.Exception: Socket bind failed
- 技术、设计常用网站收集
- 【Magedu】Week02
- 码神Linux学习第二天(加作业)
- 【Magedu】Week01
- Linux 信号