形态学操作是对图像形状进行的操作,一般情况下是对二值化图像进行的操作,两个基本的形态学操作是腐蚀和膨胀。
腐蚀操作很容易理解,与生活中的腐蚀意义一样,生活中的东西在腐烂的时候,总是会从边缘开始由外向内腐蚀。就是这个意思。
使用卷积核遍历图像像素值,以卷积核的中心为中心,如果与卷积核对应的像素值全为1(即全是白色),像素值就保持不变。否则与卷积核对应的像素值就全变为0。也就体现出了边缘都被腐蚀掉的情形。
从图中很容易看出腐蚀的过程。前景区被腐蚀掉。
cv2.erode(src,kernel,iterations)
参数解释:
import numpy as np
import cv2
img=cv2.imread('D://zopencv//ball.jpg',cv2.IMREAD_GRAYSCALE)
ret,mask=cv2.threshold(img,127,255,cv2.THRESH_BINARY)#转换为二值图片,不转也行
kernel=np.ones((5,5),np.uint8)
mask1=cv2.erode(mask,kernel)
cv2.imshow('mask',mask1)
cv2.waitKey(0)
cv2.destroyAllWindows()
膨胀与腐蚀恰好是两个相反的操作,腐蚀是白色向内收缩,膨胀则是白色向外扩张。
一个我们自定义的卷积核以卷积核中心为中心遍历整幅图像,如果与卷积核对应的像素值只要有1,就全为1。否则是0。
cv2.dilate(src,kernel,iteration)
import numpy as np
import cv2
img=cv2.imread('D://zopencv//pengzhang.png',cv2.IMREAD_GRAYSCALE)
ret,mask=cv2.threshold(img,127,255,cv2.THRESH_BINARY)
kernel=np.ones((5,5),np.uint8)
mask1=cv2.dilate(mask,kernel,iterations=8)
cv2.imshow('mask',mask1)
cv2.waitKey(0)
cv2.destroyAllWindows()
先进行腐蚀在进行膨胀的操作就叫做开运算
开运算(image)=膨胀(腐蚀(image))
开运算常用来去除图片中的噪声。腐蚀可以把噪声去掉,但是图像也被压缩了,所以我们需要膨胀来使图像恢复原样
cv2.morphologyEx(src,op,kernel)
cv2.MORPH_OPEN
不用多说,闭运算是先进行膨胀在进行腐蚀。常用来填补前景物中的黑点。
mask1=cv2.morphologyEx(mask,cv2.MORPH_CLOSE,kernel)
这种方法常常用来获取图像的轮廓。
梯度运算实际上就是膨胀-腐蚀
梯度运算(image)=膨胀(image)-腐蚀(image)
函数:
mask1=cv2.morphologyEx(mask,cv2.MORPH_GRADIENT,kernel)
礼帽运算(image)=原图(image)- 开运算(image)
mask1=cv2.morphologyEx(mask,cv2.MORPH_TOPHAT,kernel)
黑帽运算(image)=闭运算(image)-原图(image)
mask1=cv2.morphologyEx(mask,cv2.MORPH_BLACKHAT,kernel)