目录
在学习这一部分之前,我们必须先有个明确的膨胀和腐蚀的概念,就上图而言,膨胀和腐蚀都是针对白色部分而不是黑色部分,膨胀就是白色区域扩大,腐蚀就是白色区域缩小
1、腐蚀
要进行腐蚀操作,我们要用到cv2.erode()函数,然后为其指定源图像和卷积核,效果看下面
2、膨胀
膨胀需要用到cv2.dilate()函数,同样为其指定源图像以及卷积核,效果如下:
下面结合之前学过的滚动条实现动态侵蚀与膨胀的功能,代码如下:
import cv2
import numpy as np
import matplotlib.pyplot as plt
def nothing(x):
pass
cv2.namedWindow('image')
img=cv2.imread('images/111.jpg')
cv2.namedWindow('image')
cv2.createTrackbar('Er/Di','image',0,1,nothing)
#创建腐蚀或膨胀选择滚动条,只有两个值
cv2.createTrackbar('size','image',0,21,nothing)
#创建卷积核大小滚动条
while(1):
s = cv2.getTrackbarPos('Er/Di', 'image')
si=cv2.getTrackbarPos('size','image')
#分别接收两个滚动条的数据
k=cv2.waitKey(1)
kernel = np.ones((si,si), np.uint8)
#根据滚动条数据确定卷积核大小
erroding = cv2.erode(img, kernel)
dilation = cv2.dilate(img, kernel)
if k==27:
break
#esc键退出
if s==0:
cv2.imshow('image',erroding)
else:
cv2.imshow('image',dilation)
#判断是腐蚀还是膨胀
最后实现效果图:
开操作和闭操作主要是使用膨胀和腐蚀两个基本的操作实现。
3、开运算
- 开运算是对图像先腐蚀后膨胀
- 开运算的主要作用是可以去除孤立的小点,在纤细处进行分割
4、闭运算
- 闭运算是对图像先膨胀后腐蚀
- 闭运算的作用是填平小洞,小裂隙