在计算机视觉中,形态学操作是一种基于集合论的图像处理技术,主要用于分析和处理图像的形状特征。OpenCV 提供了 cv2.morphologyEx()
函数,用于执行多种高级形态学操作。
kernel = np.ones((15, 15), np.uint8)
1. 开运算(Opening)
-
原理:先对图像进行腐蚀操作,再进行膨胀操作。腐蚀会缩小图像中的白色区域,去除小的白色噪点;膨胀会扩大图像中的白色区域,填补小的黑色空洞。因此,开运算主要用于去除小的白色噪点。
-
应用:去除小的白色噪点,分离连接的物体,平滑较大物体的边界。同时,开运算不会明显改变物体的面积。
-
OpenCV 实现:
result = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
2. 闭运算(Closing)
-
原理:先对图像进行膨胀操作,再进行腐蚀操作。膨胀会扩大图像中的白色区域,填补小的黑色空洞;腐蚀会缩小图像中的白色区域,去除小的白色噪点。因此,闭运算主要用于填补小的黑色空洞。
-
应用:填补小的黑色空洞,连接断裂的物体,平滑物体的边界。闭运算不会明显改变物体的面积。
-
OpenCV 实现:
result = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)
3. 形态学梯度(Morphological Gradient)
-
原理:计算膨胀图与腐蚀图之差。该操作可以突出图像中物体的边缘。
-
应用:边缘检测,突出物体的边界。
-
OpenCV 实现:
result = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel)
4. 顶帽(Top Hat)
-
原理:原始图像与开运算结果之差。该操作可以突出图像中比原始图像亮的部分。
-
应用:突出图像中的小亮区域。
-
OpenCV 实现:
result = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel)
5. 黑帽(Black Hat)
-
原理:闭运算结果与原始图像之差。该操作可以突出图像中比原始图像暗的部分。
-
应用:突出图像中的小暗区域。
-
OpenCV 实现:
result = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, kernel)
6. 腐蚀(Erosion)
-
原理:将图像中的白色区域缩小,去除小的白色噪点。
-
OpenCV 实现:
result = cv2.erode(img, kernel)
7. 膨胀(Dilation)
-
:将图像中的白色区域扩大,填补小的黑色空洞。
-
OpenCV 实现:
result = cv2.dilate(img, kernel)
总结
cv2.morphologyEx()
函数是 OpenCV 中用于执行高级形态学操作的函数。通过选择不同的操作类型和结构元素形态,可以实现不同的图像处理效果。在实际应用中,形态学操作常用于去噪、分割、边缘检测等任务。