膨胀和腐蚀被称为形态学操作。它们通常在二进制图像上执行,类似于轮廓检测。通过将像素添加到该图像中的对象的感知边界,扩张放大图像中的明亮白色区域。侵蚀恰恰相反:它沿着物体边界移除像素并缩小物体的大小。 通常这两个操作是按顺序执行的,以增强重要的对象特征!
# Reads in a binary image
image = cv2.imread(‘j.png’, 0)
# Create a 5x5 kernel of ones
kernel = np.ones((5,5),np.uint8)
# Dilate the image
dilation = cv2.dilate(image, kernel, iterations = 1)
# Erode the image
erosion = cv2.erode(image, kernel, iterations = 1)
如上所述,这些操作通常组合在一起以获得理想的结果!一种这样的组合称为Opening,其是侵蚀,然后是膨胀 这在降噪中是有用的,其中侵蚀首先消除噪声(并收缩物体)然后扩张再次扩大物体,但噪声将从先前的侵蚀中消失! 为了在OpenCV中实现这一点,我们将函数morphologyEx与原始图像,我们想要执行的操作以及传入的内核一起使用。
opening = cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel)
Closing 是Opening的反向组合,它是膨胀,然后是侵蚀。这对于关闭物体内的小孔或暗区很有用
它可用于关闭前景对象内的小孔或对象上的小黑点。
closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)
Opening和Closing 操作试图提取关于物体形状的更好(更少噪声)信息或放大重要特征,如角点检测的情况!