python-opencv之形态学操作(腐蚀和膨胀)原理详解

形态学操作作用

  1. Removing noise.
  2. Isolation of individual elements and joining disparate elements in an image.
  3. Finding of intensity bumps or holes in an image.

最基本的形态操作是侵蚀和扩张。让我们更详细地了解这些操作。

Erosion 腐蚀

原理

它会侵蚀前景物体的边界,并从图像中移除小规模的细节,但同时会减少感兴趣区域的大小。

在该操作中,对图像中任意形状的奇数大小的卷积核进行卷积,如果核下的所有像素都为1,则认为原始图像中的像素(1或0)为1,否则将其侵蚀,即使其为零。

因此,根据内核的大小,所有靠近边界的像素都将被丢弃。因此前景物体的厚度或大小减小或者图像中的白色区域减小。

该方法适用于去除小的白噪声和分离两个连通的物体。

基本上,它计算给定核区域上的局部最小值。前景物体的厚度或大小会减少换句话说,图像中的白色区域会减少。

函数原型

cv2.erode(src, kernel, dst,anchor,iterations,borderType,borderValue)
src: 输入的图像

kernel: 用于腐蚀的结构元件如果element = Mat(),则使用3 × 3的矩形结构单元。内核可以使用getStructuringElement创建。

dst: 它是与src相同大小和类型的输出图像。

anchor: 它是一个整数类型的变量,表示锚点,它的默认值point是(-1,-1),这意味着锚点位于内核中心。

borderType: 是否应用边框,指定边框类型

iterations: 应用腐蚀的迭代次数

borderValue: 如果是constant边框类型,需要指定一个值

Return Value: 返回一个图像

实例
#腐蚀操作
import cv2
import matplotlib.pyplot as plt
import numpy as np

img =cv2.imread("./cycle.png",cv2.IMREAD_COLOR)
cv2.imshow("cycle",img)

kernel = np.ones((5,5),np.uint8)              #设置kenenel大小
erosion_1 = cv2.erode(img,kernel,iterations=2)
erosion_2 = cv2.erode(img,kernel,iterations=3)
erosion_3 = cv2.erode(img,kernel,iterations=4)
res = np.hstack((erosion_1,erosion_2,erosion_3)) # 参数的传入为tuple
cv2.imshow("res",res)
cv2.waitKey(0)
cv2.destroyAllWindows()
结果显示

原图
在这里插入图片描述
结果
在这里插入图片描述

Dilation(膨胀)

原理

膨胀操作通常使用一种构造元素来探测和扩展输入图像中包含的形状。这种作用与侵蚀相反
在此操作中,对图像中任意形状的奇数大小的卷积核进行卷积,如果核下至少有一个像素为1,则该像素元素为1。

所以它增加了图像中的白色区域或者前景物体的大小增加了。

为了去除噪声,侵蚀之后是膨胀。因为,侵蚀会去除白噪声,但也会缩小我们的物体。所以我们把它扩张。因为噪音消失了,它们不会再回来,但我们的目标面积增加了。

它在连接对象的破碎部分时也很有用。

函数原型

cv2.dilate(src, kernel, dst,anchor,iterations,borderType,borderValue)
src: 输入的图像

kernel: 用于膨胀的结构元件如果element = Mat(),则使用3 × 3的矩形结构单元。内核可以使用getStructuringElement创建。

dst: 它是与src相同大小和类型的输出图像。

anchor: 它是一个整数类型的变量,表示锚点,它的默认值point是(-1,-1),这意味着锚点位于内核中心。

borderType: 是否应用边框,指定边框类型

iterations: 应用膨胀的迭代次数

borderValue: 如果是constant边框类型,需要指定一个值

Return Value: 返回一个图像

实例
#腐蚀还原
import cv2
import matplotlib.pyplot as plt
import numpy as np

img =cv2.imread("./cycle.png",cv2.IMREAD_COLOR)
cv2.imshow("cycle",img)

kernel = np.ones((5,5),np.uint8)              #设置kenenel大小
erosion = cv2.erode(img,kernel,iterations=3)  # 腐蚀去除白噪点
cv2.imshow("erosion",erosion)
dilate = cv2.dilate(erosion,kernel,iterations=3) # 膨胀还原图形
cv2.imshow("dilate",dilate)

#res = np.hstack((erosion_1,erosion_2,erosion_3)) # 参数的传入为tuple

cv2.waitKey(0)
cv2.destroyAllWindows()
结果展示

原图
在这里插入图片描述
腐蚀后
在这里插入图片描述
膨胀还原后
在这里插入图片描述

  • 2
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
腐蚀膨胀是图像处理中常用的操作,可以通过OpenCV库的函数来实现。在Python中,可以使用cv2.erode()函数进行腐蚀操作,使用cv2.dilate()函数进行膨胀操作腐蚀操作可以通过设置结构元素的形状和大小来实现。在引用的代码中,使用了一个大小为(5,5)的正方形结构元素kernel,通过调用cv2.erode()函数进行2次、3次和4次腐蚀操作,分别得到erosion_1、erosion_2和erosion_3。最后使用np.hstack()函数将这些腐蚀结果水平拼接在一起,并通过cv2.imshow()函数展示出来。 膨胀操作腐蚀操作类似,同样可以设置结构元素的形状和大小。在引用的代码中,通过cv2.dilate()函数进行膨胀操作,得到了dst。同样使用cv2.imshow()函数展示出来。 腐蚀还原是指在腐蚀操作之后再进行膨胀操作,以还原图像形状。在引用的代码中,先进行了3次腐蚀操作,得到erosion,然后再进行3次膨胀操作,得到dilate。最后通过cv2.imshow()函数展示出来。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [python-opencv形态学操作腐蚀膨胀原理详解](https://blog.csdn.net/qq_38505858/article/details/126782368)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [OpenCV+python膨胀腐蚀](https://blog.csdn.net/qq_43660987/article/details/91347820)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

疯狂的蕉尼基

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值