OpenCV教程-OpenCV 腐蚀与膨胀
腐蚀和膨胀是形态学图像处理操作。OpenCV 形态学图像处理是一种修改图像几何结构的过程。在形态学中,我们找到对象的形状、大小或结构。这两个操作是为二进制图像定义的,但我们也可以在灰度图像上使用它们。它们广泛用于以下方式:
- 去除噪声
- 识别图中的强度突起或孔洞。
- 分离个体元素并将图像中的不同元素连接起来。
在本教程中,我们将简要解释腐蚀和膨胀。
膨胀
膨胀是一种扩展图像的技术。它在图像的对象边界上添加像素。结构元素控制它。结构元素是一个由1和0组成的矩阵。
结构元素
结构元素的大小和形状定义了在图像中应添加或删除多少个像素。
它是一个由1和0组成的矩阵。图像的中心像素称为原点。
它包含一个带有某个核(B)的图像A,该核可以具有任何形状或大小,通常是一个正方形或圆形。这里核B有一个定义的锚点,即核的中心。
在下一步中,将核叠加到图像上以计算最大像素值。计算完成后,图像将用一个在中心的锚点替换。较亮的区域增加了大小,从而增加了图像大小。
例如,在白色阴影中,对象的大小增加;另一方面,在黑色阴影中,对象的大小自动减小。
通过使用cv2.dilate()方法执行膨胀操作。语法如下:
cv2.dilate(src, dst, kernel)
参数: dilate() 函数接受以下参数:
- src - 表示输入图像。
- dst - 表示输出图像。
- kernel - 表示核。
考虑以下示例:
import cv2
import numpy as np
img = cv2.imread(r'C:\Users\DEVANSH SHARMA\jtp_flower.jpg, 0)
kernel = np.ones((5,5), np.uint8)
img_erosion = cv2.erode(img, kernel, iterations=1)
img_dilation = cv2.dilate(img, kernel, iterations=1)
cv2.imshow('Input', img)
cv2.imshow('Dilation', img_dilation)
cv2.waitKey(0)
输出
腐蚀
腐蚀与膨胀非常相似。区别在于在腐蚀中像素值计算的是最小值,而在膨胀中是最大值。图像在锚点下方用计算出的最小像素替换。与膨胀不同,较暗阴影的区域增加,而在白色或较亮的一侧则减小。
OpenCV 提供了cv2.erode()函数执行此操作。该函数的语法如下:
cv2.erode(src, dst, kernel)
参数:
- src - 表示源(输入)图像。
- dst - 表示目标(输出)图像。
- kernel - 表示核。
考虑以下示例:
import cv2
import numpy as np
img = cv2.imread(r'C:\Users\DEVANSH SHARMA\baloon.jpg', 1)
kernel = np.ones((5,5), np.uint8)
img_erosion = cv2.erode(img, kernel, iterations=1)
img_dilation = cv2.dilate(img, kernel, iterations=1)
cv2.imshow('Input', img)
cv2.imshow('Erosion', img_erosion)
cv2.waitKey(0)
输出
上述程序将产生以下输出。我们可以看到两个图像之间的差异。
应用于输入图像的腐蚀操作。