<>形态学梯度
基本梯度:经过膨胀操作的图像与经过腐蚀操作图像的差值图像,可以用来提取出物体的边缘部分。
内部梯度:原图像与经过腐蚀操作的图像的差值图像。
外部梯度:经过膨胀操作的图像与原图像的差值图像。
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()