形态学,主要从图像类提取分量信息,该分量信息通常对于表达和描绘图像的形状具有重要意义。腐蚀是最基本的形态学操作之一。

形态学概述

形态学,主要从图像类提取分量信息,该分量信息通常对于表达和描绘图像的形状具有重要意义。通常是图像理解时所使用的最本质的形状特征。例如在识别手写数字,在具体识别时,仅针对其骨架进行运算即可。

形态学操作主要包括腐蚀、膨胀、开运算、闭运算、形态学梯度、礼貌运算、黑帽运算等操作。

腐蚀操作和膨胀操作是形态学运算的基础,将腐蚀和膨胀操作进行结合,就可以实现开运算、闭运算等。

腐蚀

腐蚀能够将图像的边界点消除,使图像沿着边界向内收缩,也可以将小于指定结构体元素的部分去除。腐蚀用来收缩或者细化二值图像中的前景,借此消除噪声元素分割等功能。

腐蚀效果示意

基本原理

需要了解概念:前景色和背景色。在上图中,前景色就是白色,背景色就是黑色。

  • 如果结构元完全处于前景图像中,就将结构元中心所对应的腐蚀结果图像中的像素点处理为前景色。
  • 如果结构元未完全处于前景图像中(可能部分在,可能完全不在),就将结构元中心所对应的腐蚀结果图像中的像素点处理为背景色。

结构元也被称作“核”。

腐蚀原理示意

代码示例:

import cv2
import numpy as np
img = np.zeros((5,5),np.uint8)    #原图(背景)
img[1:4,1:4] = 1                  #前景
kernel = np.ones((3,1),np.uint8)  #核 
erosion = cv2.erode(img,kernel)   #腐蚀结果
print('IMG=',img)
print('kernel=',kernel)
print('EROSION=',erosion)

运行结果:

IMG= [[0 0 0 0 0]
 [0 1 1 1 0]
 [0 1 1 1 0]
 [0 1 1 1 0]
 [0 0 0 0 0]]
kernel= [[1]
 [1]
 [1]]
EROSION= [[0 0 0 0 0]
 [0 0 0 0 0]
 [0 1 1 1 0]
 [0 0 0 0 0]
 [0 0 0 0 0]]

原理解释

语法

使用cv2.erode()实现腐蚀操作。

dst = cv2.erode( src, kernel, [,anchor,[,iterations,[,boederType]]])

腐蚀示例

例1:使用函数cv2.erode()完成图像腐蚀。

import cv2
import numpy as np
img = cv2.imread('E:\Blog\OpenCV\jian.png',0)    #原图(背景)
kernel1 = np.ones((5,5),np.uint8)    #核1,小核
kernel2 = np.ones((15,15),np.uint8)  #核2,大核
erosion1 = cv2.erode(img,kernel1)    #腐蚀结果1
erosion2 = cv2.erode(img,kernel2)    #腐蚀结果2
cv2.imshow('IMG',img)
cv2.imshow('EROSION',erosion1)    
cv2.imshow('EROSION2',erosion2)
cv2.waitKey()

效果

需要注意的是,核要适合大小即可,太小可能导致效果不好,太大会导致直接失真,变得很瘦


素材:

素材


博主个人公众号
版权声明 ▶ 本网站名称:陶小桃Blog
▶ 本文链接:https://www.52txr.cn/2022/OpenCV25.html
▶ 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行核实删除。
▶ 转载本站文章需要遵守:商业转载请联系站长,非商业转载请注明出处!!

最后修改:2022 年 06 月 12 日
如果觉得我的文章对你有用,请随意赞赏