使用 Python-OpenCV 进行 Top Hat 和 Black Hat 变换
在形态学和数字图像处理中,顶帽和黑帽变换是用于从给定图像中提取小元素和细节的操作。这两种类型的变换,其中,顶帽变换定义为输入图像与其通过某些结构元素的打开之间的差异,而黑帽变换定义为关闭和输入图像之间的差异。这些变换用于各种图像处理任务,例如特征提取、背景均衡、图像增强等。
在这里,我们将使用打开和关闭形态学操作。
礼帽和黑帽之间的区别
顶帽过滤器用于在黑暗背景中增强感兴趣的明亮对象。黑帽操作用于做相反的事情,在明亮的背景中增强感兴趣的黑暗对象。
示例 1:顶帽变换
使用的图像:
# Importing OpenCV
import cv2
# Getting the kernel to be used in Top-Hat
filterSize =(3, 3)
kernel = cv2.getStructuringElement(cv2.MORPH_RECT,
filterSize)
# Reading the image named 'input.jpg'
input_image = cv2.imread("testing.jpg")
input_image = cv2.cvtColor(input_image, cv2.COLOR_BGR2GRAY)
# Applying the Top-Hat operation
tophat_img = cv2.morphologyEx(input_image,
cv2.MORPH_TOPHAT,
kernel)
cv2.imshow("original", input_image)
cv2.imshow("tophat", tophat_img)
cv2.waitKey(5000)
输出:
正如您在上图中所看到的,使用 Top-Hat 操作增强并去除了非常小的细节。因此,当在深色背景上作为亮像素存在时,它有助于观察输入的次要细节。
示例 2:黑帽变换
输入图像:
# Importing OpenCV and numpy
import cv2
# Defining the kernel to be used in Top-Hat
filterSize =(3, 3)
kernel = cv2.getStructuringElement(cv2.MORPH_RECT,
filterSize)
# Reading the image named 'input.jpg'
input_image = cv2.imread("testing.jpg")
input_image = cv2.cvtColor(input_image, cv2.COLOR_BGR2GRAY)
# Applying the Black-Hat operation
tophat_img = cv2.morphologyEx(input_image,
cv2.MORPH_BLACKHAT,
kernel)
cv2.imshow("original", input_image)
cv2.imshow("tophat", tophat_img)
cv2.waitKey(5000)
输出:
在此图像中,由于对输入图像应用了黑帽变换,所有在深色背景上为白色的对象都被突出显示。