首页 > 其他 > 详细

OPENCV3编程入门------掌握improc组件--第六章

时间:2020-02-16 20:36:27      阅读:129      评论:0      收藏:0      [点我收藏+]

掌握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函数一共有两个版本,区别是是否使用掩膜,下面展示使用掩膜的

int floodFill( InputOutputArray image, InputOutputArray mask,
                            Point seedPoint, Scalar newVal, CV_OUT Rect* rect=0,
                            Scalar loDiff = Scalar(), Scalar upDiff = Scalar(),
                            int flags = 4 );

值得注意的是:floodFill 不会填充掩膜非0的区域,这一点与copyTO不同,floodFill的参数如函数显示的那样,分别是 输入图像 ,掩膜,种子点,填充的颜色值 ,重绘区域最小矩形,允许的像素差的最小值,允许的像素差的最大值,最后一个FLAG 标志位包含三个部分,在书上详细的表格介绍。

图像金字塔

我们将一层一层的图像比喻成金字塔,层级越高,则图像越小,分辨率越低

高斯金字塔 用来向下采样

拉普拉斯金字塔 从金字塔向上采样,重建一个图像。

 尺寸调整 resize() 函数

void resize( InputArray src, OutputArray dst,
                          Size dsize, double fx = 0, double fy = 0,
                          int interpolation = INTER_LINEAR );

函数原型:

void pyrDown(InputArray src, OutputArray dst, const Size& dstsize=Size());

函数作用:

先对图像进行高斯平滑,然后再进行降采样(将图像尺寸行和列方向缩减一半);

函数原型:

void pyrUp(InputArray src, OutputArray dst, const Size& dstsize=Size());

函数作用:

先对图像进行升采样(将图像尺寸行和列方向增大一倍),然后再进行高斯平滑;

阈值化:

double threshold( InputArray src, OutputArray dst,double thresh, double maxval, int type );

void adaptiveThreshold( InputArray src, OutputArray dst,double maxValue, int adaptiveMethod,int thresholdType, int blockSize, double C );

adaptiveThreshold就是为每一个像素点都计算了自己的阈值,计算的方法通过adaptiveMethod方法获得,然后每个像素根据threshold的类型进行判断,是正向判断还是反向判断

这里有一个讲解的比较详细的https://www.cnblogs.com/GaloisY/p/11037350.html

OPENCV3编程入门------掌握improc组件--第六章

原文:https://www.cnblogs.com/wxb1314520/p/12317557.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!