03 图像形态学处理 (腐蚀、膨胀操作、开闭运算、梯度运算、礼帽黑帽)

1.腐蚀操作

'''
腐蚀原理:在一个卷积核内,如果存在不同的像素值,则某些像素会被另一部分腐蚀掉,即将其值修改为其他的像素值
当然,如果卷积核内像素值都一样则不会发生腐蚀,所以边界处腐蚀效果会更明显
'''
kernel = np.ones((3,3),np.uint8)  #设置卷积核大小
erosion = cv2.erode(img,kernel,iterations = 1) #腐蚀操作
#这里iteration代表迭代的次数,即腐蚀的次数,腐蚀越多图像会慢慢消失因为像素都被修改成了同一个值
#同时也跟卷积核的大小有联系,卷积核小则需要腐蚀更多次才能有明显效果

下面展示不同迭代次数的效果
1.可以消除毛须,如果继续增加腐蚀次数,图片的字就会越来越模糊最后完全变成黑色
03 图像形态学处理 (腐蚀、膨胀操作、开闭运算、梯度运算、礼帽黑帽)_第1张图片03 图像形态学处理 (腐蚀、膨胀操作、开闭运算、梯度运算、礼帽黑帽)_第2张图片
2.不断腐蚀图像不断变小
03 图像形态学处理 (腐蚀、膨胀操作、开闭运算、梯度运算、礼帽黑帽)_第3张图片
教程来自:https://www.bilibili.com/video/BV1oJ411D71z?p=2

2.膨胀操作

可以简单理解是腐蚀的逆运算,但实际不是100%的逆运算
比如前面腐蚀操作去掉了图片中文字的毛须后,文字也会因为腐蚀变细,这时候再将腐蚀后的图片进行膨胀操作,可以在进行一定的还原,注意不是100%的逆操作

kernel = np.ones((3,3),np.uint8) #同样的设置卷积核的大小 
dige_dilate = cv2.dilate(dige_erosion,kernel,iterations = 1) #参数设置大致同腐蚀操作相同

下面看看效果
这是经过腐蚀去掉了毛须后的图片,虽然去掉了毛须但文字的笔画也变细了
03 图像形态学处理 (腐蚀、膨胀操作、开闭运算、梯度运算、礼帽黑帽)_第4张图片
再进行膨胀操作如下,字体笔画变粗,基本还原了原来的粗细
03 图像形态学处理 (腐蚀、膨胀操作、开闭运算、梯度运算、礼帽黑帽)_第5张图片
不同迭代次数膨胀的效果如下
03 图像形态学处理 (腐蚀、膨胀操作、开闭运算、梯度运算、礼帽黑帽)_第6张图片
腐蚀和膨胀常常配合使用,腐蚀使图像受到了损害,再经过膨胀进行还原。

3.开运算和闭运算

开运算 = 先腐蚀后膨胀
闭运算 = 先膨胀后腐蚀

将前面的操作汇总到一个函数中实现
而在OpenCV中提供了形态学函数morphologyEx()可以更简便的进行
开运算参数:cv2.MORPH_OPEN
闭运算参数:cv2.MORPH_CLOSE

kernel = np.ones((5,5),np.uint8)  #同样的设置好核大小
'''开闭运算就是函数的参数选择的不同'''
opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel) #开运算
closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel) #闭运算

4.梯度运算

梯度=膨胀-腐蚀
什么是膨胀-腐蚀:拿一个圆来说,膨胀使圆变大,腐蚀使圆变小,一个 变大的圆-变小的圆 = 圆的轮廓。因此梯度运算可以得出一个图像的轮廓信息
同样的还是用形态学函数morphologyEx()
参数:cv2.MORPH_GRADIENT

gradient = cv2.morphologyEx(pie, cv2.MORPH_GRADIENT, kernel)

左图膨胀,右图腐蚀
03 图像形态学处理 (腐蚀、膨胀操作、开闭运算、梯度运算、礼帽黑帽)_第7张图片
二者相减得出轮廓信息
03 图像形态学处理 (腐蚀、膨胀操作、开闭运算、梯度运算、礼帽黑帽)_第8张图片

5.礼帽和黑帽

礼帽 = 原始输入 - 开运算
黑帽 = 闭运算 - 原始输入

以迪哥这张图为例
1.开运算后,会去掉图像中文字的毛须,进行礼帽操作后,用原始图片减去开运,即有毛须减去无毛须图片,得出的图片只会剩下毛须
2.闭运算后,图片中的毛须仍然存在,进行黑帽操作后,,用闭运算结果减去原始图片,即有毛须减去有毛须的图片,得出的图片毛须消失了,只保留下来点点文字的轮廓
还是用形态学函数morphologyEx()
礼帽参数:cv2.MORPH_TOPHAT
黑帽参数:cv2.MORPH_BLACKHAT

tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel) #礼帽
blackhat  = cv2.morphologyEx(img,cv2.MORPH_BLACKHAT, kernel) #黑帽

礼帽效果如下,只剩下毛须
03 图像形态学处理 (腐蚀、膨胀操作、开闭运算、梯度运算、礼帽黑帽)_第9张图片
黑帽效果如下,只剩下文字点点的轮廓
03 图像形态学处理 (腐蚀、膨胀操作、开闭运算、梯度运算、礼帽黑帽)_第10张图片
教程来自:https://www.bilibili.com/video/BV1oJ411D71z?p=2

你可能感兴趣的:(OpenCV学习笔记,opencv,python)