openvc中morphologyEx()函数是一种形态学变化函数。数学形态学可以理解为一种滤波行为,因此也称为形态学滤波。滤波中用到的滤波器(kernal),在形态学中称为结构元素。结构元素往往是由一个特殊的形状构成,如线条、矩形、圆等。
基本使用方式如下:

cv2.morphologyEx(img, op, kernel)

参数op的取值

含义

cv2.MORPH_OPEN

开运算(open) ,先腐蚀后膨胀的过程。开运算可以用来消除小黑点,在纤细点处分离物体、平滑较大物体的边界的 同时并不明显改变其面积。

cv2.MORPH_CLOSE

闭运算(close),先膨胀后腐蚀的过程。闭运算可以用来排除小黑洞。

cv2.MORPH_GRADIENT

形态学梯度(morph-grad),可以突出团块(blob)的边缘,保留物体的边缘轮廓。

cv2.MORPH_TOPHAT

顶帽(top-hat),将突出比原轮廓亮的部分。

cv2.MORPH_BLACKHAT

黑帽(black-hat),将突出比原轮廓暗的部分。

  1. 开运算(open)
# 开:先腐蚀,再膨胀
img = cv2.imread('dige.png')

kernel = np.ones((5,5),np.uint8)
opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)

cv2.imshow('opening', opening)
cv2.waitKey(0)
cv2.destroyAllWindows()

使用cv2.morphologyEx()实现开运算,闭运算,礼帽与黑帽操作以及梯度运算_黑帽


使用cv2.morphologyEx()实现开运算,闭运算,礼帽与黑帽操作以及梯度运算_数学形态学_02

  1. 闭运算(close),没有合适的图片,所以不做演示了,其作用就是像上面说的一样,可以用来排除小黑洞。
  2. 梯度运算,梯度=膨胀-腐蚀
pie = cv2.imread('pie.png')
kernel = np.ones((7,7),np.uint8)
dilate = cv2.dilate(pie,kernel,iterations = 5)
erosion = cv2.erode(pie,kernel,iterations = 5)

res = np.hstack((dilate,erosion))

cv2.imshow('res', res)
cv2.waitKey(0)
cv2.destroyAllWindows()

使用cv2.morphologyEx()实现开运算,闭运算,礼帽与黑帽操作以及梯度运算_数学形态学_03


使用cv2.morphologyEx()实现开运算,闭运算,礼帽与黑帽操作以及梯度运算_数学形态学_04

  1. 礼帽与黑帽
    礼帽 = 原始输入-开运算结果
    黑帽 = 闭运算-原始输入
#礼帽
img = cv2.imread('dige.png')
tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel)
cv2.imshow('tophat', tophat)
cv2.waitKey(0)
cv2.destroyAllWindows()

#黑帽
img = cv2.imread('dige.png')
blackhat = cv2.morphologyEx(img,cv2.MORPH_BLACKHAT, kernel)
cv2.imshow('blackhat ', blackhat )
cv2.waitKey(0)
cv2.destroyAllWindows()

使用cv2.morphologyEx()实现开运算,闭运算,礼帽与黑帽操作以及梯度运算_黑帽_05


使用cv2.morphologyEx()实现开运算,闭运算,礼帽与黑帽操作以及梯度运算_取值_06