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);
效果图
腐蚀的有点严重线条全部不见了
三:开运算(morph_open)
开运算实质就是对图像先腐蚀再膨胀,开运算可以消除小物体,在纤细点处分离物体,并在平滑较大物体时不明显的改变面积
四:闭运算(morph_close)
闭运算时候先膨胀再腐蚀,闭运算可以消除小黑点
五:形态学梯度(gradient)
形态学梯度是膨胀图与腐蚀图只差,可以保留和突出边缘
六:顶帽(morph_tophat)
顶帽是闭运算结果与原图做差的结果,可以分离比临近点亮一些的斑块(一些大的亮斑)
七:黑帽(morph_blacktop)
黑帽是原图与开运算结果 相减的结果,可以分离比临近点暗的斑块