掌握improc一共包含4个章节,图像处理,图像变换,图像轮廓与图像分割与修复以及直方图处理
OPENCV3入门------掌握improc组件(图像处理篇)
平滑处理的方法
三种线性滤波:
方框滤波:void boxFilter( InputArray src, OutputArray dst, int ddepth,Size ksize, Point anchor = Point(-1,-1),bool normalize = true,int borderType = BORDER_DEFAULT );
输入图像,输出图像,图像的深度,卷积核的大小Size(Width, Height), 被平滑的点 ,是否归一化,外部像素点的处理方式
均值滤波:void blur( InputArray src, OutputArray dst,Size ksize, Point anchor = Point(-1,-1),int borderType = BORDER_DEFAULT );具体的定义跟上面的方框滤波类似
高斯滤波:高斯滤波就是图像与正太分布做卷积,正态分布又叫高斯分布
void GaussianBlur( InputArray src, OutputArray dst, Size ksize,double sigmaX, double sigmaY = 0,int borderType = BORDER_DEFAULT );
kisze : 核的大小,宽度与高度必须是正奇数或者是0 sigmaX高斯核函数在X方向上的标准偏差 sigmaY是高斯核函数在Y方向的标准偏差 这两者都可以为0,如果为0那么由ksize算出。
个人在使用上面三种滤波的时候,随着kszie的增大,前两种滤波会变得更加模糊,而高斯滤波变化不是特别的大。
两种非线性滤波
中值滤波 :像素点邻域灰度值的中值代替该像素点的灰度值 void medianBlur( InputArray src, OutputArray dst, int ksize );
双边滤波:双边滤波采用了两个高斯滤波的结合。一个负责计算空间邻近度的权值,也就是常用的高斯滤波器原理。而另一个负责计算像素值相似度的权值。在两个高斯滤波的同时作用下,就是双边滤波 void bilateralFilter( InputArray src, OutputArray dst, int d,double sigmaColor, double sigmaSpace,int borderType = BORDER_DEFAULT );
形态学滤波
膨胀(dilate)与腐蚀(erode)
膨胀:求局部的最大值 ,增大了灰度值 腐蚀:求局部的最小值 降低了全体的灰度值
void dilate( InputArray src, OutputArray dst, InputArray kernel,
Point anchor = Point(-1,-1), int iterations = 1,
int borderType = BORDER_CONSTANT,
const Scalar& borderValue = morphologyDefaultBorderValue() );
void erode( InputArray src, OutputArray dst, InputArray kernel,
Point anchor = Point(-1,-1), int iterations = 1,
int borderType = BORDER_CONSTANT,
const Scalar& borderValue = morphologyDefaultBorderValue() );
我们一般要配合自定义的核 Mat kernel= getStructuringElement(int shape, Size ksize, Point anchor = Point(-1,-1));
shape 有固定的枚举值 Size :核的大小 Point确定锚点的位置
erode ( src , dst ,kernel ) ;
开运算: 先腐蚀后膨胀 闭运算 先膨胀后腐蚀 形态学梯度 :膨胀图与腐蚀图之差
顶帽 :原图像与开运算后的图像之差 黑帽 :闭运算图像与原图像之差
void morphologyEx( InputArray src, OutputArray dst,
int op, InputArray kernel,
Point anchor = Point(-1,-1), int iterations = 1,
int borderType = BORDER_CONSTANT,
const Scalar& borderValue = morphologyDefaultBorderValue() );
通过不同的OP的值确定进行的操作, kernel 就是认定的核,用之前的getStructuringElement进行自定义
漫水填充:floodFill函数一共有两个版本,区别是是否使用掩膜,下面展示使用掩膜的