光之使者 发表于 2024-9-12 10:09:10

OpenCV第八章——腐蚀与膨胀

1. 腐蚀

什么是腐蚀操作:
   在OpenCV中,腐蚀操作是一种形态学处理技术,用于图像的远景地区(通常是白色地区)进行缩小处理。它的基本头脑是通过结构元素(也称为内核)来“腐蚀”图像中的远景对象,使得远景地区变小,从而去除小的噪声或细节,大概填补图像中的小孔洞。
腐蚀操作的基本概念

腐蚀(Erosion)操作涉及到将结构元素(通常是一个小的矩形、圆形或其他形状的矩阵)应用到图像上。对于图像中的每一个像素位置,结构元素会滑动到该位置上,并与图像的对应部分进行比较。


[*]如果结构元素完全位于远景地区内,则结构元素的中央位置保留原像素值。
[*]否则,结构元素的中央位置会被设置为背景值(通常是0)。
腐蚀操作的步骤


[*] 选择结构元素: 结构元素是一个小的矩阵,定义了腐蚀操作的形状和巨细。常用的形状有矩形、椭圆和十字形。
[*] 滑动结构元素: 将结构元素在图像上滑动,逐个像素地应用腐蚀操作。
[*] 更新图像: 根据结构元素与图像的重叠部分的匹配情况,更新图像的像素值。
腐蚀操作的语法结构 
   OpenCV将腐蚀操作封装成了erode()方法,其语法结构如下:
dst = cv2.erode(src, kernel, anchor, iterations, borderType, borderValue)
参数说明:
src;原始图像
kernel:腐蚀使用的核
anchor:可选参数,核的锚点位置
iterations:可选参数,腐蚀操作的迭代次数
borerType:可选参数,边界样式
borderValue:可选参数,边界值
返回值说明:
dst:经过腐蚀之后的图像
操作用图片:
    https://i-blog.csdnimg.cn/direct/71fe31e2735141baaa1a4426e5f03282.jpeg
腐蚀操作运行代码:
import cv2
import numpy as np
img = cv2.imread(r"C:\Users\cgs\Desktop\pictures\5(7).jpg")
k = np.ones((3, 3), np.uint8)# 创建3*3的数组作为核
cv2.imshow("img", img)# 原图
dst = cv2.erode(img, k)# 腐蚀操作
cv2.imshow("dst", dst)# 腐蚀效果
cv2.waitKey()
cv2.destroyAllWindows()
操作效果图像:
https://i-blog.csdnimg.cn/direct/699d779e349342459eccb990989d3ad6.png
2. 膨胀

什么是膨胀操作:
   膨胀操作是OpenCV中的一种形态学处理技术,用于扩展图像中的远景地区(通常是白色地区)。它的基本头脑是通过结构元素“扩张”图像中的远景对象,使得远景地区变大,从而填补小的安定或连接断裂的部分。膨胀操作的步骤类似于腐蚀,但相反:

[*] 选择结构元素:选择一个结构元素来定义膨胀操作的形状和巨细。
[*] 滑动结构元素:将结构元素在图像上滑动,每个像素位置的值会根据结构元素与图像的重叠部分进行更新。
[*] 更新图像:如果结构元素与图像的重叠部分有远景像素,则结构元素中央位置被设置为远景值(通常是255)。
膨胀操作的语法结构:
   dst = cv2.dilate(src, kernel, anchor, iterations, borderType, borderValue)
参数说明:
src:原始图像
kernel:膨胀使用的核
anchor:可选参数, 核的锚点位置
iterations:可选参数,腐蚀操作的迭代次数,默认值为1
borderType:可选参数, 边界样式
borderValue:可选参数, 边界值
    操作用图片
https://i-blog.csdnimg.cn/direct/71fe31e2735141baaa1a4426e5f03282.jpeg 
膨胀操作的示例代码 :
import cv2
import numpy as np
img = cv2.imread(r"C:\Users\cgs\Desktop\pictures\5(7).jpg")
k = np.ones((9, 9), np.uint8)# 创建9*9的数组作为核
cv2.imshow("img", img)
dst = cv2.dilate(img, k)# 膨胀操作
cv2.imshow("dst", dst)# 显示膨胀效果
cv2.waitKey()
cv2.destroyAllWindows()
操作效果图像:
https://i-blog.csdnimg.cn/direct/2bcd236567ec41d19ec0f4541aeaae8a.png
3. 开运算

什么是开运算:
   开运算是一种形态学处理技术,结合了腐蚀和膨胀操作,用于去除图像中的小物体或噪声,同时保持较大物体的形状和巨细。开运算的基本步骤如下:

[*]腐蚀:起首对图像进行腐蚀操作,去除图像中的小的噪声或细节。
[*]膨胀:然后对腐蚀后的图像进行膨胀操作,恢复较大物体的形状和边界。
    操作用图片
https://i-blog.csdnimg.cn/direct/71fe31e2735141baaa1a4426e5f03282.jpeg 
开运算操作代码实例:
import cv2
import numpy as np
img = cv2.imread(r"C:\Users\cgs\Desktop\pictures\5(7).jpg")
k = np.ones((5, 5), np.uint8)# 创建5*5的数组作为核
cv2.imshow("img", img)
dst = cv2.erode(img, k)# 腐蚀操作
dst = cv2.dilate(dst, k)# 膨胀操作
cv2.imshow("dst", dst)# 显示开运算结果
cv2.waitKey()
cv2.destroyAllWindows()
开运算操作效果图像:
https://i-blog.csdnimg.cn/direct/539bb9af062f4826b424b6ea3a1009b8.png
4. 闭运算

什么是闭运算?
   开运算是一种形态学处理技术,结合了腐蚀和膨胀操作,用于去除图像中的小物体或噪声,同时保持较大物体的形状和巨细。开运算的基本步骤如下:

[*]腐蚀:起首对图像进行腐蚀操作,去除图像中的小的噪声或细节。
[*]膨胀:然后对腐蚀后的图像进行膨胀操作,恢复较大物体的形状和边界。
 闭运算操作代码实例:
import cv2
import numpy as np
img = cv2.imread(r"C:\Users\cgs\Desktop\pictures\5(7).jpg")
k = np.ones((15, 15), np.uint8)# 创建15*15的数组作为核
cv2.imshow("img", img)
dst = cv2.dilate(img, k)# 膨胀操作
dst = cv2.erode(dst, k)# 腐蚀操作
cv2.imshow("dst2", dst)# 闭运算结果
cv2.waitKey()
cv2.destroyAllWindows()
闭运算操作效果图像:
https://i-blog.csdnimg.cn/direct/1d1b391f1e5f4a0abab04306e83815f2.png
5. 形态学方法

   cv2.MORPH_ERODE:腐蚀操作
cv2.MORPH_DILATE:膨胀操作
cv2.MORPH_OPEN:开运算,先腐蚀后膨胀
cv2.MORPH_CLOSE:闭运算,先膨胀后腐蚀
cv2.MORPH_GRADIENT:梯度运算,膨胀图减腐蚀图可以得出建议的外貌
cv2.MORPH_TOPHAT:顶帽运算,原始图像减开运算图像
cv2.MORPH_BLACKHAT:黑帽运算,闭运算图像减原始图像
5.1 梯度运算

什么是梯度运算?
   梯度简单明白为像素的变化水平。梯度运算的运算过程就是让原图的膨胀图像减去原图的腐蚀图像
import cv2
import numpy as np
img = cv2.imread(r"C:\Users\cgs\Desktop\pictures\5(7).jpg")
k = np.ones((5,5), np.uint8)# 创建5*5的数组作为核
cv2.imshow("img", img)# 显示原图
dst = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, k) # 进行梯度运算
cv2.imshow("dst", dst)# 显示梯度运算结果
cv2.waitKey()
cv2.destroyAllWindows()
操作效果图像:
https://i-blog.csdnimg.cn/direct/1ac998b18d9849d4aab806181de68c36.png 
5.2 顶帽运算

什么是顶帽运算?
   原图减去图像的开运算图像,得到的效果只剩下外部细节
 操作用图像:
https://i-blog.csdnimg.cn/direct/c1b7acabd0964c93ae61afa86031257f.png
操作代码示例:
import cv2
import numpy as np
img = cv2.imread(r"B:\Python_opencv_book\08\06\spider.png")# 读取原图
k = np.ones((5, 5), np.uint8)# 创建5*5的数组作为核
cv2.imshow("img", img)# 显示原图
dst = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, k)# 进行顶帽运算
cv2.imshow("dst", dst)# 显示顶帽运算结果
cv2.waitKey()
cv2.destroyAllWindows()
 操作效果图像:
https://i-blog.csdnimg.cn/direct/c7c178973cc244eda73a2e5043c33bea.png
5.3 黑帽运算

什么是黑帽运算?
   原图的闭运算图像减去原图。剩下内部细节 
操作用图像:
 https://i-blog.csdnimg.cn/direct/c1b7acabd0964c93ae61afa86031257f.png
操作代码示例:
import cv2
import numpy as np
img = cv2.imread(r"B:\Python_opencv_book\08\07\spider2.png")# 读取原图
k = np.ones((5, 5), np.uint8)# 创建5*5的数组作为核
cv2.imshow("img", img)# 显示原图
dst = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, k)# 进行黑帽运算
cv2.imshow("dst", dst)# 显示黑帽运算结果
cv2.waitKey()
cv2.destroyAllWindows()
操作效果图像:
 https://i-blog.csdnimg.cn/direct/b661e6f2356d434a827333d81ac237f7.png
那么有关关于腐蚀与膨胀的内容到这里就结束了!!!感谢各人的观看!!! 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: OpenCV第八章——腐蚀与膨胀