二、语法介绍
(二)图像处理
7.形态学变换
- 腐蚀和膨胀
腐蚀是指将图像中一些毛刺去除,使图像更柔和;膨胀是指将缺陷填满使图像更饱满。
#腐蚀
cv.erode(img,kernel,iterations)
#膨胀
cv.dilate(img,kernel,iterations)
实战!
import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
img = cv.imread("C:/Users/LEGION/Pictures/bqb/xin1.jpg")
kernel=np.ones((5,5),np.uint8)
img1=cv.erode(img,kernel,iterations=6)#腐蚀
img2=cv.dilate(img,kernel,iterations=6)#膨胀
fig,axes=plt.subplots(nrows=1,ncols=3,figsize=(10,8),dpi=100)
axes[0].imshow(img[:,:,::-1])
axes[0].set_title("yuan")
axes[1].imshow(img1[:,:,::-1])
axes[1].set_title("fu")
axes[2].imshow(img2[:,:,::-1])
axes[2].set_title("peng")
plt.show()
运行结果
- 开闭运算
开运算是先腐蚀后膨胀,其作用是:分离物体,消除小区域。特点:消除噪点,去除小的干扰块,而不影响原来的图像。
闭运算与开运算相反,是先膨胀后腐蚀,作用是消除“闭合”物体里面的孔洞,特点:可以填充闭合区域。
cv.morphologyEx(img, op, kernel)
参数:
op:处理方式。
- 开运算:cv.MORPH_OPEN
- 闭运算:cv.MORPH_CLOSE
- 礼帽:cv.MORPH_TOPHAT
- 黑帽:cv.MORPH_BLACKHAT
实战:
import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
img = cv.imread("C:/Users/LEGION/Pictures/bqb/hei.jpg")
kernel=np.ones((20,20),np.uint8)
img1=cv.morphologyEx(img,cv.MORPH_OPEN,kernel)
img2=cv.morphologyEx(img,cv.MORPH_CLOSE,kernel)
fig,axes=plt.subplots(nrows=1,ncols=3,figsize=(10,8),dpi=100)
axes[0].imshow(img[:,:,::-1])
axes[0].set_title("yuan")
axes[1].imshow(img1[:,:,::-1])
axes[1].set_title("open")
axes[2].imshow(img2[:,:,::-1])
axes[2].set_title("close")
plt.show()
运行结果
- 礼帽和黑帽
礼帽 = 原始输入-开运算结果提取出刺来
黑帽 = 闭运算-原始输入只留下一个大致轮廓
实战!
import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
img = cv.imread("C:/Users/LEGION/Pictures/bqb/qiao.jpg")
kernel=np.ones((2,2),np.uint8)
img1=cv.morphologyEx(img,cv.MORPH_TOPHAT,kernel)
img2=cv.morphologyEx(img,cv.MORPH_BLACKHAT,kernel)
#img3=cv.morphologyEx(img,cv.MORPH_OPEN,kernel)
#img4=cv.morphologyEx(img,cv.MORPH_CLOSE,kernel)
fig,axes=plt.subplots(nrows=1,ncols=3,figsize=(10,8),dpi=100)
axes[0].imshow(img[:,:,::-1])
axes[0].set_title("yuan")
axes[1].imshow(img1[:,:,::-1])
axes[1].set_title("tophat")
axes[2].imshow(img2[:,:,::-1])
axes[2].set_title("blackhat")
#axes[3].imshow(img3[:,:,::-1])
#axes[3].set_title("open")
#axes[4].imshow(img4[:,:,::-1])
#axes[4].set_title("close")
plt.show()
运行结果