CV11 形态学转换(侵蚀、扩张、开运算/顶帽、闭运算/黑帽和形态学梯度)

简介: 原理:卷积核通过在图像中不断滑动,原始图像中的一个像素(无论是1还是0),只有当内核下所有的像素都是1时才被认为是1,否则它就会被侵蚀。

知识体系


5f28e5451dad3273a84202c2f610cf45.png


侵蚀


侵蚀的思想就像土壤侵蚀一样,它侵蚀前景物体的边界(尽量使前景保持白色)


原理:卷积核通过在图像中不断滑动,原始图像中的一个像素(无论是1还是0),只有当内核下所有的像素都是1时才被认为是1,否则它就会被侵蚀。


效果:根据内核的大小,边界上的像素都会被丢弃,边界会不断被腐蚀


import cv2
import numpy as np
img = cv2.imread("8.png")
kernel = np.ones((5,5),np.uint8)
#侵蚀函数
erosion = cv2.erode(img,kernel,iterations=3)
cv2.imshow("img",erosion)
cv2.waitKey(0)
cv2.destroyAllWindows()


扩张


它与侵蚀正好相反。如果内核下的至少一个像素为“ 1”,则像素元素为“ 1”。因此,它会增加图像中的白色区域或增加前景对象的大小。通常,在消除噪音的情况下,腐蚀后会膨胀。因为腐蚀会消除白噪声,但也会缩小物体。因此,我们对其进行了扩展。由于噪音消失了,它们不会回来,但是我们的目标区域增加了。在连接对象的损坏部分时也很有用。


替换erosion = cv2.erode(img,kernel,iterations=3)函数即可


# 扩张函数
dilation = cv2.dilate(img,kernel,iterations=1)


cv2.erode()/cv2.dilate()函数


功能:侵蚀/扩张


输入参数:


1.图像名img

2.卷积核

3.腐蚀或扩张程度


‘修改卷积核大小和改变侵蚀/扩张程度效果相似,不过iterations的效果更优越


侵蚀核扩张的效果对比


6f3f4acb7cd68e8f366e0ef7cf0dc625.png


形态学梯度


突出轮廓


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


效果如下:


开运算


开运算,即先侵蚀,再扩张,有利于消除外部噪点


# 开运算
opening = cv2.morphologyEx(img,cv2.MORPH_OPEN,kernel)


morphologyEx()函数


功能:开运算/顶帽、闭运算/黑帽


输入参数:


1.图像名img

2.开运算(cv2.MORPH_OPEN)/顶帽(cv2.MORPH_TOPHAT)、闭运算(cv2.MORPH_CLOSE)/黑帽(cv2.MORPH_BLACKHAT)

3.卷积核


顶帽


顶帽,即输入图像-开运算


# 顶帽
tophat = cv2.morphologyEx(img,cv2.MORPH_TOPHAT,kernel)


闭运算


闭运算,即先扩张,再侵蚀,有利于消除内部噪点


# 闭运算
closing = cv2.morphologyEx(img,cv2.MORPH_CLOSE,kernel)


黑帽


黑帽,即输入图像-闭运算


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


运算效果


02a5f252274428dbc3db975ca3d79e0c.png


效果相当明显了


代码程序


import cv2
import numpy as np
img = cv2.imread("8.png")
kernel = np.ones((5,5),np.uint8)
#侵蚀函数
erosion = cv2.erode(img,kernel,iterations=3)
# 扩张函数
# dilation = cv2.dilate(img,kernel,iterations=1)
# 开运算
# opening = cv2.morphologyEx(img,cv2.MORPH_OPEN,kernel)
# 闭运算
# closing = cv2.morphologyEx(img,cv2.MORPH_CLOSE,kernel)
# 形态学梯度
# gradient = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel)
# 顶帽
# tophat = cv2.morphologyEx(img,cv2.MORPH_TOPHAT,kernel)
# 黑帽
# blackhat = cv2.morphologyEx(img,cv2.MORPH_BLACKHAT,kernel)
cv2.imshow("img",erosion)
cv2.waitKey(0)
cv2.destroyAllWindows()
相关文章
|
7月前
|
计算机视觉 Python
OpenCV形态学运算中梯度运算、顶帽、黑帽运算讲解与实战应用(附Python源码)
OpenCV形态学运算中梯度运算、顶帽、黑帽运算讲解与实战应用(附Python源码)
192 0
|
计算机视觉
数字图像处理实验(七)| 形态学图像处理{生成结构元素strel、腐蚀运算imerode、膨胀运算imdilate、开运算imopen、闭运算imclose}(附代码和实验截图、汉字视力表项目、总结)
数字图像处理实验(七)| 形态学图像处理{生成结构元素strel、腐蚀运算imerode、膨胀运算imdilate、开运算imopen、闭运算imclose}(附代码和实验截图、汉字视力表项目、总结)
738 0
数字图像处理实验(七)| 形态学图像处理{生成结构元素strel、腐蚀运算imerode、膨胀运算imdilate、开运算imopen、闭运算imclose}(附代码和实验截图、汉字视力表项目、总结)
|
4月前
|
PHP 计算机视觉
罗德里格斯公式推导,以及如何使用cv2.Rodrigues进行旋转矩阵和旋转向量之间的相互转化
罗德里格斯公式推导,以及如何使用cv2.Rodrigues进行旋转矩阵和旋转向量之间的相互转化
134 0
|
7月前
|
算法 API 计算机视觉
OpenCV(图像处理)-基于Python-形态学处理-开运算、闭运算、顶帽、黑帽运算
1. 形态学 OpenCV形态学是一种基于OpenCV库的数字图像处理技术,主要用于处理图像的形状、结构和空间关系。它包括一系列图像处理工具和算法,包括膨胀、腐蚀、开运算、闭运算、形态学梯度、顶帽、黑帽等。
132 0
|
4月前
|
算法框架/工具
第4章-变换-4.2-特殊矩阵变换和运算
第4章-变换-4.2-特殊矩阵变换和运算
17 0
|
7月前
|
API 计算机视觉
【OpenCV】形态学滤波(2):开运算、形态学梯度、顶帽、黑帽
【OpenCV】形态学滤波(2):开运算、形态学梯度、顶帽、黑帽
|
7月前
|
计算机视觉
[Halcon&图像] 形态学处理(腐蚀、膨胀、开运算、闭运算)
[Halcon&图像] 形态学处理(腐蚀、膨胀、开运算、闭运算)
402 1
|
算法 图形学
计算机图形学 之 DDA直线算法(数值微分法)
计算机图形学 之 DDA直线算法(数值微分法)
426 0
|
计算机视觉 Python
08 OpenCV腐蚀、膨胀与形态学运算
腐蚀操作是一种形态学操作,它用于缩小二值图像中的对象,并去除图像中的噪声和细节。其基本原理是将图像中的每个像素与内核进行比较,如果内核覆盖的区域内所有像素值都为非零值,则该像素保持不变;否则,该像素的值会被更新为 0 00,从而实现缩小图像中的对象。腐蚀操作的效果通常与内核的大小、形状以及迭代次数有关,通过适当选择这些参数,可以实现不同程度的腐蚀效果。
|
C++ 计算机视觉
【OpenCv • c++】形态学技术操作 —— 开运算与闭运算
【OpenCv • c++】形态学技术操作 —— 开运算与闭运算
475 0