腐蚀和膨胀
腐蚀和膨胀主要用于处理二值图像、去噪、连接断裂区域、提取形状特征
1、腐蚀
腐蚀会让图像中的白色区域变小
效果:
去除小噪点
缩小物体
消除细小连接
kernel = np.ones( (3,3),np.uint8) #设置kenenel大小, 核改为5*5试试
erosion_1 = cv2.erode(sun,kernel,iterations=5) #iterations为5试试
cv2.imshow('erosion_1',erosion_1)

代码解释
np.ones((3,3), np.uint8):生成一个 3×3的全1矩阵
erosion_1 = cv2.erode(sun,kernel,iterations=5):用一个3×3的小窗口,把太阳图片的白色区域向内不断削减5次,让图像中的物体变细、变小
cv2.imshow('erosion_1',erosion_1):显示经过腐蚀处理后的图像
原理大概如下图:

2、膨胀
膨胀会让图像中的白色区域变大、变粗。
kernel = np.ones( (2,2),np.uint8) #设置kenenel大小
wenzi_new = cv2.dilate (wenzi, kernel,iterations=2)
cv2.imshow( 'wenzi_new',wenzi_new)

代码解释:
kernel = np.ones((2,2), np.uint8):创建一个 2×2的结构元素
wenzi_new = cv2.dilate (wenzi, kernel,iterations=2):进行膨胀操作
原文字图片
↓
2×2 kernel扫描
↓
白色区域向外扩展
↓
膨胀2次
↓
wenzi_new
边缘检测
图像中像素变化明显的位置,就是边缘。
1、Canny边缘检测
流程图:
原图
↓
灰度化
↓
高斯滤波
↓
梯度计算
↓
非极大值抑制
↓
双阈值检测
↓
边缘图
代码:
edge = cv2.Canny(blur,50,150)
cv2.imshow("Canny",edge)
cv2.waitKey(0)
cv2.destroyAllWindows()
代码解释:
edge = cv2.Canny(blur,50,150):对经过高斯滤波后的图像 blur 进行边缘检测,得到边缘图 edge

2、Sobel边缘检测
流程图:
原图
↓
灰度化
↓
Sobel X方向梯度
↓
Sobel Y方向梯度
↓
合成梯度大小
↓
转换为8位图像
↓
显示边缘
代码:
sobel_x = cv2.Sobel(gray,cv2.CV_64F,1,0,ksize=3)
sobel_y = cv2.Sobel(gray,cv2.CV_64F,0,1,ksize=3)
sobel = cv2.magnitude(sobel_x,sobel_y)
sobel = cv2.convertScaleAbs(sobel)
代码解释:
sobel_x = cv2.Sobel(gray,cv2.CV_64F,1,0,ksize=3):使用 Sobel 算子计算灰度图 gray 在 X 方向上的梯度
sobel_y = cv2.Sobel(gray,cv2.CV_64F,0,1,ksize=3)使用 Sobel 算子计算灰度图 gray 在Y方向上的梯度
sobel = cv2.magnitude(sobel_x, sobel_y):将 Sobel X方向和Y方向的边缘信息合成为完整的边缘强度图。
sobel = cv2.convertScaleAbs(sobel):将计算结果转换成 OpenCV 可以正常显示的8位图像。


![[特殊字符]DeepSeek‑Harness(DSH)小白保姆教程-171主机测评](https://www.171host.com/wp-content/uploads/2026/08/20260816085112-6a817a009aabf-220x150.png)
