形态学处理梯度、顶帽、黑帽

形态学梯度

基本梯度:经过膨胀操作的图像与经过腐蚀操作图像的差值图像,可以用来提取出物体的边缘部分。

内部梯度:原图像与经过腐蚀操作的图像的差值图像。

外部梯度:经过膨胀操作的图像与原图像的差值图像。

opencv中支持的是基本梯度,下面放一段代码和运行结果更直观的理解:

import cv2
import matplotlib.pyplot as plt

img = cv2.imread("fig.jpg")
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))
gradient = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel)

plt.subplot(121); plt.imshow(img); plt.title("original")
plt.subplot(122); plt.imshow(gradient); plt.title("gradient")
plt.show()

在这里插入图片描述

顶帽

原图像与经过开运算操作的图像的差值图像,作用是可以提取噪声,突出原图像中比周围亮的部分。(因为开运算本身可以去除一些孤立点,细微连接,毛刺等细节,所以这些细节就可以通过顶帽操作来提取出来)

下面一段代码和运行结果来更直观的理解:

import cv2
import matplotlib.pyplot as plt

img = cv2.imread("fig.jpg")
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (25, 25))
tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel)

plt.subplot(121); plt.imshow(img); plt.title("original")
plt.subplot(122); plt.imshow(tophat); plt.title("tophat")
plt.show()

在这里插入图片描述

黑帽

经过闭运算操作的图像与原图像的差值图像,作用是突出原图像中比周围暗的区域。(比如闭运算本身可以填补物体内部的一些黑洞,这些黑洞就可以通过黑帽运算来凸显)

下面一段代码和运行结果来更直观的理解:

import cv2
import matplotlib.pyplot as plt

img = cv2.imread("fig.jpg")
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (25, 25))
blackhat = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, kernel)

plt.subplot(121); plt.imshow(img); plt.title("original")
plt.subplot(122); plt.imshow(blackhat); plt.title("blackhat")
plt.show()

在这里插入图片描述

发布了34 篇原创文章 · 获赞 46 · 访问量 1794

猜你喜欢

转载自blog.csdn.net/jackzhang11/article/details/104175074