膨胀和腐蚀被称为形态学操作。它们通常在二进制图像上执行,类似于轮廓检测。通过将像素添加到该图像中的对象的感知边界,扩张放大图像中的明亮白色区域。侵蚀恰恰相反:它沿着物体边界移除像素并缩小物体的大小。
通常这两个操作是按顺序执行的,以增强重要的对象特征!
- 膨胀
要在OpenCV中扩展图像,您可以使用该dilate函数和三个输入:原始二进制图像,确定扩张大小的内核(无将导致默认大小),以及执行扩张的多次迭代(通常= 1)
在下面的例子中,我们有一个5x5的内核,它们在图像上移动,就像一个滤波器一样,如果任何周围的像素在5x5窗口中都是白色,则将像素变成白色!我们将使用草书字母“j”的简单图像作为示例。 - 腐蚀
为了侵蚀图像,我们采用erode函数。
# 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
如上所述,这些操作通常组合在一起以获得理想的结果!一种这样的组合称为Opening,其是侵蚀,然后是膨胀
这在降噪中是有用的,其中侵蚀首先消除噪声(并收缩物体)然后扩张再次扩大物体,但噪声将从先前的侵蚀中消失!
为了在OpenCV中实现这一点,我们将函数morphologyEx与原始图像,我们想要执行的操作以及传入的内核一起使用。
opening = cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel)
Closing
Closing 是Opening的反向组合,它是膨胀,然后是侵蚀。这对于关闭物体内的小孔或暗区很有用
它可用于关闭前景对象内的小孔或对象上的小黑点。
closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)
Opening和Closing 操作试图提取关于物体形状的更好(更少噪声)信息或放大重要特征,如角点检测的情况!
网友评论