膨胀操作能对图像的边界进行扩张。将前景接触到的背景点合并到前景中。

如果图像内两个对象的距离较近,那么在膨胀的过程中,两个对象可能连通到一起。膨胀操作对填补图像风格后图像内所存在的空白相当于帮助。同腐蚀过程中,也是使用一个结构元来逐个扫描被膨胀图像的关系来确定膨胀结果。

膨胀原理

和腐蚀原理类似,也是通过使用一个结构元来逐个像素地扫描要被膨胀的图像。

  • 当结构元中任意一点处于前景图像中,就将对应的中心点的像素点处理为前景色
  • 如果结构元完全不处于背景图像外,就将对应的中心点的像素点处理为背景色

原理

基本语法

使用cv2.dilate()实现对图像的膨胀操作。

dst = cv2.dilate(src,kernel[,anchor[,iterations[,borderType[,borderValue]]]])
  • src是原始图像

  • kernel表示结构元

原理演示

import cv2
from cv2 import dilate
import numpy as np
img = np.zeros((5,5),np.uint8)
img[2:3,1:4] = 1
kernel = np.ones((3,1),np.uint8)
dilation = cv2.dilate(img,kernel)
print('IMG=\n',img)
print('KERNEL=\n',kernel)
print('DILATION=\n',dilation)

结果:

IMG=
 [[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]]
KERNEL=
 [[1]
 [1]
 [1]]
DILATION=
 [[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]]

图解膨胀原理

实例演示

import cv2
import numpy as np
img = cv2.imread('E:\Blog\OpenCV\wan.png',0)    #原图(背景)
kernel1 = np.ones((5,5),np.uint8)               #核1,小核
kernel2 = np.ones((15,15),np.uint8)             #核2,大核
Dilate = cv2.dilate(img,kernel1)                #腐蚀结果1
Dilate2 = cv2.dilate(img,kernel2)               #腐蚀结果2
cv2.imshow('IMG',img)
cv2.imshow('dilate',Dilate)    
cv2.imshow('dilate2',Dilate2)
cv2.waitKey()

效果演示


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

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