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()
相关文章
|
算法 搜索推荐 C++
【C++STL基础入门】vector运算和遍历、排序、乱序算法
【C++STL基础入门】vector运算和遍历、排序、乱序算法
624 0
|
存储 移动开发 数据可视化
Seurat - 聚类教程 (1)
Seurat - 聚类教程 (1)
|
IDE 开发工具 C++
VS2015+Qt5.9.8编译报错:error MSB6006: “cmd.exe”已退出,代码为 2
VS2015+Qt5.9.8编译报错:error MSB6006: “cmd.exe”已退出,代码为 2
3173 0
|
存储 缓存 算法框架/工具
Transformers 4.37 中文文档(十三)(8)
Transformers 4.37 中文文档(十三)
251 1
|
并行计算 异构计算 Python
python代码torch.device("cuda:0" if torch.cuda.is_available() else "cpu")是什么意思?
【6月更文挑战第3天】python代码torch.device("cuda:0" if torch.cuda.is_available() else "cpu")是什么意思?
1573 4
三阶魔方公式详解及快速解法方法介绍
三阶魔方公式详解及快速解法方法介绍
vue3.2中setup语法糖父组件如何调用子组件中的方法
vue3.2中setup语法糖父组件如何调用子组件中的方法
vue3.2中setup语法糖父组件如何调用子组件中的方法
|
Java 数据库连接 mybatis
Mybatis查找结果注入bean时出现类型转换错误
Mybatis查找结果注入bean时出现类型转换错误
141 0
|
数据采集 并行计算 安全
Python中的多线程与协程的比较与应用场景
Python中的多线程与协程的比较与应用场景
537 0
|
Ubuntu
USB摄像头设置采集亮度和对比度
USB摄像头设置采集亮度和对比度
724 0
USB摄像头设置采集亮度和对比度

热门文章

最新文章