定义:形象的话就是“增肥”与“减肥”。
作用:(1)膨胀处理缺陷问题,就是把缺陷给填补了。(2)腐蚀用来处理毛刺问题,把毛刺给腐蚀掉。
kernel = np.ones((3,3),dtype=np.uint8)
总结:指定全为1的3*3矩阵,为卷积核,该像素点的值为重点的3*3范围内的最大的值。由于我们是二值图像,所以只要包含周围白的部分,就变为白色。(只要原图片3*3范围内有白的,该像素点就是白的。
dilate = cv2.dilate(img,kernel,1) # 1 为迭代次数,也就是执行几次膨胀操作 (补缺陷)
更改kernel大小(4*4),也就改变了膨胀的程度。范围
腐蚀操作:和膨胀相反,将毛刺消除,就是取卷积核3*3区域内的最小值。总结:只要原图中有黑色的,该像素就是黑色的。
kernel = np.ones((3,3),dtype=np.uint8)
erosion = cv2.erode(img,kernel,iterations=1)
开运算和闭运算
腐蚀和膨胀都会有信息损失,两种结合就可以减少损失
开运算:先腐蚀,再膨胀。消除毛刺不损失信息。
opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel, 1)
闭运算:先膨胀,再腐蚀。缺陷补全。
closing = cv2.morphologyEx(img cv2.MORPH_CLOSE,kernel)
梯度计算 :显示边缘信息。
膨胀的图像 - 腐蚀的图像 即用大一圈的图像减去小一圈的图像正好就是边缘信息。
gradient = cv2.morphologyEx(img, cv2.MORPH_GRADIENT,kernel)
高帽和黑帽
高帽计算:原始图像-开运算结果,获取要消除的毛刺信息(显示毛刺)
tophat = cv2.morphologyEx(img, cv2.MORPHTOPHAT, kernel)
黑帽计算:笔运算结果-原始图像,获取要弥补的缺陷信息(显示缺陷)
black_hat = cv2.morphologyEx(img, cv2.MORPHBLACKHAT, kernel)