一、腐蚀
"""
腐蚀:
腐蚀可以将图像的边界点消除,使图像沿着边界向内收敛,也可以将小于指定结构体的部分取出
dst=cv2.erode(img,kernel[,dst[,anchor[,iterations[,borderType[,borderValue]]]]])
img:输入图像,深度必须为CV_8U,CV_16U,CV_16S,CV_32F或者CV_64F中的一种
dst:输出图像
kernel:代表腐蚀操作时所采用的结构类型,可以自定义生成,也可以通过函数cv2.getStructuringElement()
anchor:锚点位置,默认(-1,-1),为核的中心位置
iterations:腐蚀操作的迭代次数,默认值为1,即只进行一次腐蚀操作
boderType:边界样式BoderTypes
"""
import cv2
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread('img_2.png',0)
img_gray=(img,cv2.COLOR_BGR2GRAY)
kernel = np.ones((5,5),np.uint8)
erodion = cv2.erode(img,kernel,iterations=1)
img_gray=cv2.cvtColor(erodion,cv2.COLOR_BGR2RGB)
plt.imshow(img_gray)
plt.show()
二、膨胀
"""
膨胀:与腐蚀相反
cv2.dilate(img1,kernel,iterations)
"""
import cv2
import numpy as np
import matplotlib.pyplot as plt
img1 = cv2.imread('clock.png',0)
kernel = np.ones((5,5),np.uint8)
dilation = cv2.dilate(img1,kernel,iterations=1)
img_gray=cv2.cvtColor(dilation,cv2.COLOR_BGR2RGB)
plt.imshow(img_gray)
plt.show()
三、通用形态学函数
"""
通用形态学函数:
腐蚀操作和膨胀操作是形态学运算的基础,将腐蚀和膨胀操作进行结合,
dst=cv2.morphologyEx(img,kernel[,dst[,anchor[,iterations[,borderType[,borderValue]]]]])
img:输入图像,深度必须为CV_8U,CV_16U,CV_16S,CV_32F或者CV_64F中的一种
dst:输出图像
kernel:代表腐蚀操作时所采用的结构类型,可以自定义生成,也可以通过函数cv2.getStructuringElement()
anchor:锚点位置,默认(-1,-1),为核的中心位置
iterations:腐蚀操作的迭代次数,默认值为1,即只进行一次腐蚀操作
boderType:边界样式BoderTypes
"""
1.开运算
"""
开运算:先腐蚀后膨胀,可以实现去噪
cv2.MORPH_OPEN: 等价于dst=open(img,element)=dilate(erode(img,element))
"""
import cv2
import numpy as np
import matplotlib.pyplot as plt
img= cv2.imread('img_2.png',0)
plt.subplot(1,2,1)
plt.imshow(img)
plt.title('img')
kernel = np.ones((7,7),np.uint8)
open=cv2.morphologyEx(img,cv2.MORPH_OPEN,kernel)
imgRGB=cv2.cvtColor(open,cv2.COLOR_BGR2RGB)
plt.subplot(1,2,2)
plt.imshow(imgRGB)
plt.title('open')
plt.show()
2.闭运算
"""
闭运算:先膨胀后腐蚀,可以关闭前景物体内的小孔,除去物体上的小黑点,还可以将不同的前景图像连接
cv2.MORPH_CLOSE: dst=close(img,element)=erode(dilate(img,element))
"""
import cv2
import numpy as np
import matplotlib.pyplot as plt
img= cv2.imread('img_2.png',0)
plt.subplot(1,2,1)
plt.imshow(img)
plt.title('img')
kernel = np.ones((7,7),np.uint8)
close=cv2.morphologyEx(img,cv2.MORPH_CLOSE,kernel)
imgRGB=cv2.cvtColor(close,cv2.COLOR_BGR2RGB)
plt.subplot(1,2,2)
plt.imshow(imgRGB)
plt.title('close')
plt.show()
3.梯度运算
"""
梯度运算
cv2.MORPH_GRADIENT:等价于dst=morph_grad(img,element)=dilate(img,element)-erode(img,element)
"""
import cv2
import numpy as np
import matplotlib.pyplot as plt
img= cv2.imread('img_2.png',0)
plt.subplot(1,2,1)
plt.imshow(img)
plt.title('img')
kernel = np.ones((7,7),np.uint8)
gradient=cv2.morphologyEx(img,cv2.MORPH_GRADIENT,kernel)
imgRGB=cv2.cvtColor(gradient,cv2.COLOR_BGR2RGB)
plt.subplot(1,2,2)
plt.imshow(imgRGB)
plt.title('gradient')
plt.show()
3.礼帽运算
"""
礼帽运算:
cv2.MORPH_TOPHAT:等价于dst=tophat(img,element)=img-open(img,element)
"""
import cv2
import numpy as np
import matplotlib.pyplot as plt
img= cv2.imread('img_2.png',0)
plt.subplot(1,2,1)
plt.imshow(img)
plt.title('img')
kernel = np.ones((7,7),np.uint8)
tophat=cv2.morphologyEx(img,cv2.MORPH_TOPHAT,kernel)
imgRGB=cv2.cvtColor(tophat,cv2.COLOR_BGR2RGB)
plt.subplot(1,2,2)
plt.imshow(imgRGB)
plt.title('tophat')
plt.show()
4.黑帽运算
"""
黑帽运算:
cv2.MORPH_BLACKHAT:等价于dst=blackhat(img,element)=close(img,element)-img
"""
import cv2
import numpy as np
import matplotlib.pyplot as plt
img= cv2.imread('img_2.png',0)
plt.subplot(1,2,1)
plt.imshow(img)
plt.title('img')
kernel = np.ones((7,7),np.uint8)
blackhat=cv2.morphologyEx(img,cv2.MORPH_BLACKHAT,kernel)
imgRGB=cv2.cvtColor(blackhat,cv2.COLOR_BGR2RGB)
plt.subplot(1,2,2)
plt.imshow(imgRGB)
plt.title('blackhat')
plt.show()