opencv图像形态学操作(腐蚀+膨胀)

  • 图像腐蚀 黑色区域变大
    腐蚀的效果是把图片"变瘦",其原理是在原图的小区域内取局部最小值。这个核也叫结构元素,因为形态学操作其实也是应用卷积来实现的,结构元素可以是矩形/椭圆/十字形,可以用cv2.getStructuringElement()来生成不同形状的结构元素,比如:kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5)) # 矩形结构 kernel
    在这里插入图片描述
image = imread('image.jpg')
show(image)

在这里插入图片描述

image = imread('image.jpg')
kernel = np.ones((5, 5), np.uint8)
erosion = cv2.erode(image,kernel)

show(erosion)

在这里插入图片描述

  • 图像膨胀 膨胀与腐蚀相反,取的是局部最大值,效果是把图片"变胖":(白色区域变大)
dilation = cv2.dilate(image,kernel)
show(dilation)

在这里插入图片描述

  • 开运算
    Opening开运算
    先腐蚀后膨胀叫开运算(因为先腐蚀会分开物体,这样容易记住〕,其作用是。分离物体,消除小区域。这类形态学操作用cv2.morphologyExC函数实现
image2 = imread('image2.jpg')
show(image2)

在这里插入图片描述

# 开运算去除白点
opening = cv2.morphologyEx(image2, cv2.MORPH_OPEN, kernel)
show(opening)
  • 闭运算
    闭运算则相反:先膨胀后腐蚀(先膨胀会使白色的部分扩张,以至于消除/"闭合"物体里面的小黑洞,所以叫闭运算
# 闭运算去除黑点
closing = cv2.morphologyEx(image2, cv2.MORPH_CLOSE, kernel)
show(closing)

在这里插入图片描述

# 开闭运算去除黑白点
closing = cv2.morphologyEx(image2, cv2.MORPH_OPEN, kernel)
opening = cv2.morphologyEx(closing, cv2.MORPH_CLOSE, kernel)
show(opening)

在这里插入图片描述

  • Gradient形态学梯度
    膨胀图减去腐蚀图,dilation - erosion,这样会得到物体的轮鄏
gradient = cv2.morphologyEx(image, cv2.MORPH_GRADIENT, kernel)
show(gradient)

在这里插入图片描述

  • 白帽 原图减去开运算后的图:src - opening 相当于显示出开运算消除掉的白点
# 得到opening去除的部分
tophat = cv2.morphologyEx(image2, cv2.MORPH_TOPHAT, kernel)
show(tophat)

在这里插入图片描述

  • 黑帽 闭运算后的图减去原图:closing - src 相当于显示出闭运算消除掉的黑点
# 得到closing去除的部分
blackhat = cv2.morphologyEx(image2, cv2.MORPH_BLACKHAT, kernel)
show(blackhat)

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/cyj5201314/article/details/114990422