首页 > 其他分享 >[OpenCV] 形态学滤波 (补充)

[OpenCV] 形态学滤波 (补充)

时间:2023-04-17 09:35:44浏览次数:45  
标签:运算 MORPH 滤波 形态学 OpenCV 参数 getStructuringElement CV 函数

作用:

开运算(先腐蚀后膨胀) : 用来消除小物体,再纤细点处分离物体,并且再光滑较大的物体的边界的同时不明显改变其面积

闭运算 (先膨胀后腐蚀):能够排除小型黑洞

形态学梯度 (膨胀 减去 腐蚀): 对二值图像进行这一操作可以把blob的边缘突出出来,我们可以用
形态学梯度来保留物体的边缘轮廓

顶帽 (原图 减去 开运算): 由于开运算的结果是放大了裂缝或者局部低亮度的区域,因此,再原图中减去开运算后的图 -------- 得到比原图轮廓周围更明亮的区域
往往用来分离比临近点亮一些的版块

黑帽(闭运算 减去 原图) : 突出了比原图轮廓周围区域更暗的区域
用来分离比临近点暗一些的斑块

MorphologyEx

CV_EXPORTS_W 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() );

 

第一个参数,InputArray类型的src,输入图像,即源图像,填Mat类的对象即可.图像位深应该为以下5种之一:CV_8U、CV_16U、CV_16S、CV_32F和CV_64F。

第二个参数,OutputArray类型的dst,即目标图像,函数的输出参数,需要和源图片有一样的尺寸和类型。

第三个参数,int类型的op,表示形态学运算的类垣,可以是如表6.2中任意之一的标识符。
      MORPH_OPEN 开运算
      MORPH_CLOSE 闭运算
      MORPH_GRADIENT 形态梯度学
      MORPH_TOPHAT 顶帽
      MORPH_BLACKHAT 黑帽
      MORPH_ERODE 腐蚀
      MORPH_DILATE 膨胀

第四个参数,InputArray类型的kernel,形态学运算的内核,若为NULL,表示的是使用参考点位于中心3x3的核。一航使用函数getStructuringElement配合这个参数的使用。getStructuringElement函数会返回指定形状和尺寸的结构元素(内核矩阵)。关于getStructuringElement我们之前有讲到过,这里为了大家参阅方便,再写一道。

getStructuringElement函数的第一个参数表示内核的形状,我们可以选择如下三种形状之一:

      矩形--MORPH_RECT

      交叉形--MORPH_CROSS

      椭圆形--MORPH_ELLIPSE

而getStructuringElement函数的第二和第三个参数分别是内核的尼寸以及锚点的位置。

一般在调用erode以及dilate函数之前,要先定义一个Mat类型的变量来获得getStructuringElement函数的返回值。对于锚点的位置,有默认值Point(-1,-1),表示锚点位于中心。另外需要注意:十字形的element形状唯一依赖于锚点的位置。而在其他情况下,锚点只是影响形态学运算结果的偏移。
getStructuringElement函数相关的调用示例代码如下。

 

Int g_nStructElementSize=3;//结构元素(内核矩阵)的尺寸

//获取自定义核
Mat element = getStructuringEllement(MORPH_RECT,
Size(2 * g_nStructBLlementSize + 1, 2 * g_nStructElementSize + 1 ),
Point(g_nStructELlementSize, g_nStructElementSize));

 

调用之后,我们可以在接下来调用erode或dilate函数时,在第三个参数填保存了getStructuringElement返回值的Mat类型变量。对应于上面的示例,就是element变量。

第五个参数,Point类型的anchor,锚的位置,其有默认值(-1,-1),表示锚位于中心。

第六个参数,int类型的iterations,迭代使用函数的次数,默认值为1。
第七个参数,int类型的borderType,用于推断图像外部像素的某种边界模式。注意它有默认值BORDER_CONSTANT。

第八个参数,constScalar&类型的bordervalue,当边界为常数时的边界值,有默认值morphologyDefaultBorderValue(),一般不用去管它。需要用到它时,可以看官方文档中的createMorphologyFilter()函数得到更详细的解释。其中的这些操作都可以进行就地(in-place)操作,且对于多通道图像,每一个通道都单独进行操作。

标签:运算,MORPH,滤波,形态学,OpenCV,参数,getStructuringElement,CV,函数
From: https://www.cnblogs.com/lengblog/p/17324754.html

相关文章

  • [OpenCV] 漫水填充floodFill (类似于photoshop的智能填充)
    两个函数重载:CV_EXPORTSintfloodFill(InputOutputArrayimage,PointseedPoint,ScalarnewVal,CV_OUTRect*rect=0,ScalarloDiff=Scalar(),ScalarupDiff=Scalar(),intflags......
  • OpenCV图像连通区域分析(14)
    图像连通区域图像的连通域是指图像中具有相同像素值并且位置相邻的像素组成的区域,连通域分析是指在图像中寻找出彼此互相独立的连通域并将其标记出来。提取图像中不同的连通域是图像处理中较为常用的方法,例如在车牌识别、文字识别、目标检测等领域对感兴趣区域分割与识别。一般情况......
  • OpenCV计算相机与装甲板之间的距离
    这个距离的计算需要建立在得知平移矩阵的计算上,想要了解平移矩阵获取的可以移步:https://www.cnblogs.com/nobodyx/p/17297244.html先看一下代码#include<iostream>#include<cmath>usingnamespacestd;doubledistance(doublex1,doubley1,doublez1,doublex2,dou......
  • OpenCV图像腐蚀与膨胀(13)
    膨胀与腐蚀是数学形态学在图像处理中最基础的操作。其卷积操作非常简单,对于图像的每个像素,取其一定的邻域,计算最大值/最小值作为新图像对应像素位置的像素值。其中,取最大值就是膨胀,取最小值就是腐蚀。膨胀与腐蚀能实现多种多样的功能,主要如下:消除噪声分割出独立的图像元素,在图像中......
  • 【滤波跟踪】基于扩展卡尔曼滤波器实现 IMU 和 GPS 数据计算无人机的姿态附matlab代码
    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。......
  • 非全研究生-室内定位研究-综合导航系统中用于状态估计的滤波分类
    线性滤波器线性滤波器是在综合导航系统中最常用的滤波器。它们基于线性状态空间方程,并且具有良好的稳健性和准确性。它们通常能够以最小均方误差的方式估计出状态变量,并且通过使用预测和更新步骤能够显著改善测量误差。典型的线性滤波包括Kalman滤波和扩展卡尔曼滤波,其中扩展卡尔......
  • OpenCV图像阈值操作(12)
    什么是阈值阈值又叫临界值,是指一个效应能够产生的最低值或最高值。实际上是基于图片亮度的一个黑白分界值,默认值是50%中性灰,即128,亮度高于128(<50%的灰)的会变白,低于128(>50%的灰)的会变黑。从一副图像中利用阈值分割出我们需要的物体部分(当然这里的物体可以是一部分或者整体)。这样......
  • 数字图像处理之「中值滤波」
    中值滤波原理中值滤波就是用一个奇数点的移动窗口(要求奇数主要是为了保证整个模板有唯一中心元素),将窗口中心点的值用窗口内各点的中值代替。假设窗口内有5点,其值为80、90、200、110和120,那么此窗口内各点的中值即为110。设有一个一维序列f1,f2,...,fnf1,f2,...,fn,取窗口长度(点数......
  • OpenCV图像模糊操作(11)
    模糊原理Smooth/Blur是图像处理中最简单和常用的操作之一使用操作的原因之一就是为了给图像预处理时候减低噪声图像噪声是指存在于图像数据中的不必要的或多余的干扰信息Smooth/Blur操作原理是数学的卷积运算,根据不同卷积运算公式,划分了多种图像滤波方式图像滤波:指的是在尽量保留......
  • 算法 | 数字图像处理之「中值滤波」
    中值滤波原理中值滤波就是用一个奇数点的移动窗口,将窗口中心点的值用窗口内个点的中值代替。假设窗口内有5点,其值为80、90、200、110和120,那么此窗口内各点的中值即为110。设有一个一维序列\(f_1,f_2,...,f_n\),取窗口长度(点数)为m(m为奇数),对其进行中值滤波,就是从输入序列中相机抽......