OpenCV在图像的形态学运算方面都是相较于图像中高亮部分而言,对应的二值化图像就是对白色区域进行膨胀或腐蚀。其主要作用是消除噪音、分割图像、连接图像、图像梯度的求取以及求局部最大值或最小值等。
本文主要是通过简单的实例进行说明,大家可以通过互联网搜索相应的函数进行尝试和学习。
# 获取并显示图像
img = cv2.imread('img/wen.png')
腐蚀操作类似于“蚕食”,将图像中的高亮区域或白色部分进行缩减细化,其运行结果图比原图的高亮区域更小,通过erode函数对其进行操作。
# 形态学-腐蚀操作
kernel = np.ones((3,3),np.uint8)# 3*3的卷积核,uint8图像矩阵类型
erosion_1 = cv2.erode(img ,kernel,iterations = 1)# iterations 迭代次数
erosion_2 = cv2.erode(img ,kernel,iterations = 2)
erosion_3 = cv2.erode(img ,kernel,iterations = 3)
res = np.hstack((erosion_1,erosion_2,erosion_3))
cv2.imshow('erosion_1 VS erosion_2 VS erosion_3', res)
cv2.waitKey(0)
cv2.destroyAllWindows()
膨胀通俗来讲就是对将白色部分在原来的形状上扩大,对黑色部分压缩,通过dilate函数对其进行操作。
dilate_1 = cv2.dilate(img ,kernel,iterations = 1)
dilate_2 = cv2.dilate(img ,kernel,iterations = 2)
dilate_3 = cv2.dilate(img ,kernel,iterations = 3)
res = np.hstack((dilate_1,dilate_2,dilate_3))
cv2.imshow('dilate_1 VS dilate_2 VS dilate_3', res)
cv2.waitKey(0)
cv2.destroyAllWindows()
接下来,我们按照morphologyEx函数的不同的形态学运算类型进行实例演示,便于大家更好理解。
即先腐蚀,再膨胀,一般用于消除细长的突出物,再还原,主要用于将物体分开。
morphologyEx_1 = cv2.morphologyEx(img ,cv2.MORPH_OPEN,kernel)
cv2.imshow('morphologyEx_1', morphologyEx_1)
cv2.waitKey(0)
cv2.destroyAllWindows()
即先膨胀,再腐蚀,一般用于消除物体内部细小的空隙,用于物体连接,形成闭合整体。
morphologyEx_2 = cv2.morphologyEx(img ,cv2.MORPH_CLOSE,kernel)
cv2.imshow('morphologyEx_2', morphologyEx_2)
cv2.waitKey(0)
cv2.destroyAllWindows()
即梯度 = 膨胀-腐蚀,之所以称为形态学梯度是因为一般的获得边缘方式是通过sobel算子计算梯度获得,而这种获得梯度的方式是通过膨胀减腐蚀获得边缘,是通过形态学操作的方式获得边缘。
# 梯度运算 梯度 = 膨胀-腐蚀
gradient = cv2.morphologyEx(img ,cv2.MORPH_GRADIENT,kernel)
cv2.imshow('gradient', gradient)
cv2.waitKey(0)
cv2.destroyAllWindows()
礼帽= 原始输入-开运算结果,一般用于提取图象中的高亮部分,因为开操作会消除高亮部分,用原图像减去开操作后的图像就会得到高亮部分的图像。
# 礼帽 = 原始输入-开运算结果
tophat = cv2.morphologyEx(img ,cv2.MORPH_TOPHAT,kernel)
cv2.imshow('tophat', tophat)
cv2.waitKey(0)
cv2.destroyAllWindows()
黑帽 = 开运算- 原始输入,一般用于提取低亮部分的图像,因为闭操作会消去细小的低亮部分,用低亮部分的图像减去原图像获得低亮部分的图像。
tophat = cv2.morphologyEx(img ,cv2.MORPH_BLACKHAT,kernel)
cv2.imshow('tophat', tophat)
cv2.waitKey(0)
cv2.destroyAllWindows()
看了本文之后有些同学可能对于概念还比较模糊,大家可以点击OpenCV图像腐蚀和膨胀、开操作、闭操作、形态学梯度、顶帽和黑帽进行更深一步的学习和思考。