opencv 膨胀和腐蚀

膨胀腐蚀是对高亮部分的操作(及大像素值)膨胀腐蚀可以消除噪声,连接相邻区域,分割独立区域,寻求区域最大最小值


膨胀的原理是通过一个核去边缘覆盖,然后取这个核的最大值,把核的其他区域用最大值替换,结果就是白色区域扩张了,对于彩色或灰度图就是图片像素变大,变得更亮

腐蚀的原理刚好与膨胀相反,腐蚀是把区域内的值用区域内的最小值代替,对于二值化图就是用0(黑)代替。



一:膨胀函数 dilate

dilate( InputArray src, OutputArray dst, InputArray kernel,   Point anchor=Point(-1,-1), int iterations=1,int borderType=BORDER_CONSTANT,  constScalar&borderValue=morphologyDefaultBorderValue() );

第三个参数是Mat类的核可以用Mat elemt=getStructuringElement(MORPH_RECT,Size(5,5),Point(-1,-1));函数得到

getStructuringElement中的第一个参数是核的形状MORPH_RECT=0--矩形, MORPH_CROSS=1--十字形, MORPH_ELLIPSE=2--椭圆

第二个参数是内核大小

第三个是锚点位置(-1,-1)表示锚点在中心

dilate函数的第四个参数是内核位置(-1,-1)表示锚点在中心,

第五个参数是腐蚀次数

其函数最后最后几个参数一般默认




二:腐蚀函数erode

其参数类型和膨胀函数的参数类型一致

erode(srcImage,dstImage,elemt);



效果图

opencv 膨胀和腐蚀


腐蚀的有点严重线条全部不见了



三:开运算(morph_open)

开运算实质就是对图像先腐蚀再膨胀,开运算可以消除小物体,在纤细点处分离物体,并在平滑较大物体时不明显的改变面积


四:闭运算(morph_close)

闭运算时候先膨胀再腐蚀,闭运算可以消除小黑点


五:形态学梯度(gradient)

形态学梯度是膨胀图与腐蚀图只差,可以保留和突出边缘


六:顶帽(morph_tophat)

顶帽是闭运算结果与原图做差的结果,可以分离比临近点亮一些的斑块(一些大的亮斑)


七:黑帽(morph_blacktop)

黑帽是原图与开运算结果 相减的结果,可以分离比临近点暗的斑块