morphologyEx(src,op,kernel,dst = None,anchor = None,iterations = None,borderType = None,borderValue = None)
该函数执行高级形态转换,可以使用腐蚀和膨胀作为基本操作来执行高级形态转换,任何操作都能够原地执行。在多通道图像的例子中,每一个通道都独立地被处理。
erode(腐蚀):它沿着物体边界移除像素并缩小物体的大小,会增强图像的暗部。
dilate(膨胀):通过将像素添加到该图像中的对象的感知边界,扩张放大图像中的明亮白色区域。
opening operation(开运算):先腐蚀,后膨胀。能够排除小黑点。
close operation(闭运算):先膨胀,后腐蚀。能够排除小亮点。
参数
src:输入图像,输入图像的通道数是任意的。
op:形态操作的类型如:cv2.MORPH_ERODE(腐蚀),cv2.MORPH_DILATE(膨胀),cv2.MORPH_OPEN(开运算),cv2.MORPH_CLOSE(闭元素)
...等等操作
(详细参考官方文档 MorphTypes)
kernel:输入一个数组作为核。能被getStructuringElement创建。
anchor:核的锚点位置,负值说明该锚点位于核中心。默认为核中心。
iterations:整型int。腐蚀与膨胀被应用的次数。默认为None。
例:一次开运算迭代两次:(MORPH_OPEN=)伴随两次迭代等于:腐蚀--腐蚀--膨胀--膨胀。
borderType:像素边界扩展类型,参照官方文档所列的几种类型BorderTypes
borderValue:边界为常量时的边界值。默认值有特殊含义。默认值为None。
测试
腐蚀
kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(3,3))
pic1 = cv2.morphologyEx(pic, cv2.MORPH_ERODE,kernel)
膨胀
kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(3,3))
pic2 = cv2.morphologyEx(pic, cv2.MORPH_DILATE,kernel)
形态学变化——开运算
kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(3,3))
pic1 = cv2.morphologyEx(pic, cv2.MORPH_OPEN,kernel)
形态学变化——闭运算
kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(3,3))
pic2 = cv2.morphologyEx(pic, cv2.MORPH_CLOSE,kernel)