- 图像腐蚀 黑色区域变大
腐蚀的效果是把图片"变瘦",其原理是在原图的小区域内取局部最小值。这个核也叫结构元素,因为形态学操作其实也是应用卷积来实现的,结构元素可以是矩形/椭圆/十字形,可以用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 相当于显示出开运算消除掉的白点
tophat = cv2.morphologyEx(image2, cv2.MORPH_TOPHAT, kernel)
show(tophat)
- 黑帽 闭运算后的图减去原图:closing - src 相当于显示出闭运算消除掉的黑点
blackhat = cv2.morphologyEx(image2, cv2.MORPH_BLACKHAT, kernel)
show(blackhat)