膨胀和腐蚀是对白色部分(高亮部分)而言。
膨胀是对原图中高亮部分进行膨胀,即“邻域扩张”,结果图的高亮区域变大。
腐蚀是原图中高亮部分被腐蚀,“邻域收缩”,结果图的高亮区域变小。
对图像进行形态学变换。变换对象一般为灰度图或二值图,功能函数放在morphology子模块内。
1、膨胀(dilation)
原理:有一个结构元素或模板与原图像素比对,比对过程中,中心像素位置的值根据八邻域取或运算,或运算为1就取自己的中心值,否则用周围的最大值代替中心值。
一般对二值图像进行操作。找到像素值为1的点,将它的邻近像素点都设置成这个值。1值表示白,0值表示黑,因此膨胀操作可以扩大白色值范围,压缩黑色值范围。一般用来扩充边缘或填充小的孔洞。返回的是布尔型,需要进行astype。如下图,白色区域膨胀了。
opencv中膨胀函数:
cv2.dilate(image, kernel, interations)
image:待膨胀的图像
kernel:膨胀操作的内核,默认是3x3的矩阵,也可用getStructuringElement()函数指定形状大小
interations:腐蚀次数,默认为1
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# author: MP time:2019/8/29
import cv2
def dilate_demo(image):
gray_img = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))
dst = cv2.dilate(gray_img, kernel)
cv2.imshow('dilate_img', dst)
src = cv2.imread('C:/Users/user/Desktop/multi.png')
cv2.imshow('source_img', src)
dilate_demo(src)
cv2.waitKey(0)
cv2.destroyAllwindows()
其他函数:scipy.ndimage.morphology.binary_dilation(input, structure=None,iterations=1)
input:输入图像,一般为二值图
2.腐蚀
原理:有一个结构元素或模板与原图像素比对,比对过程中,中心像素位置的值根据八邻域取交运算,交运算为1就取自己的中心值,否则用周围的最大值代替中心值。如下图,高亮区域变小。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# author: MP time:2019/8/29
import cv2
def erode_demo(image):
gray_img = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))
dst = cv2.erode(gray_img, kernel)
cv2.imshow('erode_img', dst)
src = cv2.imread('C:/Users/user/Desktop/multi.png')
cv2.imshow('source_img', src)
erode_demo(src)
cv2.waitKey(0)
cv2.destroyAllwindows()
转自:https://blog.youkuaiyun.com/haoji007/article/details/52063306
https://blog.youkuaiyun.com/qq_44262417/article/details/89365673