使用cv2.morphologyEx()实现开运算,闭运算,礼帽与黑帽操作以及梯度运算
转载
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),将突出比原轮廓暗的部分。
|
- 开运算(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()
- 闭运算(close),没有合适的图片,所以不做演示了,其作用就是像上面说的一样,可以用来排除小黑洞。
- 梯度运算,梯度=膨胀-腐蚀
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()
- 礼帽与黑帽
礼帽 = 原始输入-开运算结果
黑帽 = 闭运算-原始输入
#礼帽
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()