opencv使用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),将突出比原轮廓暗的部分。
  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()

在这里插入图片描述
在这里插入图片描述

  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()

在这里插入图片描述
在这里插入图片描述

  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()

在这里插入图片描述
在这里插入图片描述

发布了27 篇原创文章 · 获赞 20 · 访问量 1552

猜你喜欢

转载自blog.csdn.net/qq_39507748/article/details/104539673