【OpenCV|【OpenCV Python】核心操作--形态学转换

形态学转换是针对图像形状进行的简单操作,一般是指针对二值化图像进行的操作,常见的形态学转换包括腐蚀,膨胀,开运算等。
1.腐蚀
顾名思义,腐蚀是对前景物体的边缘进行腐蚀掉,形成如现实中一样的腐蚀效果,其原理如下:
卷积核沿着图像滑动,如果卷积核对应区域的图像像素值都是1,则卷积核中心对应的像素值保持不变,反之则全变成0,所以在图像边缘区域,部分为0,部分为1的区域都会变成0,再往里面则会保持不变。
opencv提供erode(src, kernel,iterations)函数进行腐蚀操作,而且腐蚀操作,也可以去除二值化图形里的一些噪点
例如:
img =cv2.imread("test2.png")
kernel = np.ones((5,5),np.uint8)
dst = cv2.erode(img,kernel)
【OpenCV|【OpenCV Python】核心操作--形态学转换
文章图片


可以看出,相对于左边原图,右边腐蚀之后的图形有明显腐蚀效果,而且噪声被除去
2.膨胀
膨胀可以理解为腐蚀的反操作,膨胀的原理是:
同样的卷积核沿着图像滑动,只要卷积核对应的图像像素值有一个是1,则这块区域全部变成1.
使用cv2.dilate(src , kernel)函数就可以实现膨胀操作
例如:
img= cv2.imread("test2.png")
kernel= np.ones((5,5), np.uint8)
dst= cv2.dilate(img,kernel)
【OpenCV|【OpenCV Python】核心操作--形态学转换
文章图片

屏幕剪辑的捕获时间:2018/4/9 21:11

3.开运算:
开运算就是先进行腐蚀,在进行膨胀,opencv提供函数cv2.morphologyEx(src, 运算方式,kernel)
来实现开运算
值得注意的是:
(1)如果先进行腐蚀去除了噪点,但原图形的形状也被破坏,此时再使用膨胀就可以恢复回去,这是开运算存在的意义
(2)直接使用cv2.morphologyEx和先使用cv2.erode再使用cv2.dilate函数的效果一样

例如:
img =cv2.imread("test2.png")
kernel = np.ones((5,5), np.uint8)
dst=cv2.morphologyEx(img, cv2.MORPH_OPEN,kernel)
【OpenCV|【OpenCV Python】核心操作--形态学转换
文章图片

屏幕剪辑的捕获时间:2018/4/9 21:22



4.闭运算
闭运算就是开运算的逆过程,先进行膨胀,在腐蚀,原理和开运算一样,可以用于去除二值化图像的背景色噪点。
例如:
img =cv2.imread("test.png")
kernel =np.ones((5,5) , np.uint8)
dst=cv2.morphologyEx(img, cv2.MORPH_CLOSE,kernel)
【OpenCV|【OpenCV Python】核心操作--形态学转换
文章图片

屏幕剪辑的捕获时间:2018/4/9 21:28

可以看出白色图形里的黑色噪点已经被去除。








5.形态学梯度:
其实就是图像的膨胀和腐蚀之后两张图形的差,其结果就像原图形的轮廓
例如:

img = cv2.imread("test2.png")
kernel = np.ones((5,5) , np.uint8)
dst= cv2.morphologyEx(img, cv2.MORPH_GRADIENT,kernel)
【OpenCV|【OpenCV Python】核心操作--形态学转换
文章图片

屏幕剪辑的捕获时间: 2018/4/9 21:31





【【OpenCV|【OpenCV Python】核心操作--形态学转换】

    推荐阅读