OpenCV学习笔记-顶帽、黑帽、形态学梯度

一、顶帽
又称礼帽,是原始图像与进行开运算之后得到的图像的差。

因为开运算到来的结果是放大了裂痕或者局部低亮度的区域,因此,从原图中减去运算后的图,得到的效果图突出了比原图轮廓周围的区域更明亮的区域,且这一操作和选择的核的大小相关。
顶帽运算往往用来分离比邻近点亮一些的斑块。当一幅图像具有大幅的背景的时候,而微小物品比较有规律的情况下,可以使用顶帽运算进行背景提取。

def tophat_demo(img):
    gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
    ret, thresh = cv.threshold(gray, 0, 255, cv.THRESH_BINARY | cv.THRESH_OTSU)
    kernel = cv.getStructuringElement(cv.MORPH_RECT, (15, 15))
    dst = cv.morphologyEx(thresh, cv.MORPH_TOPHAT, kernel)
    cv.imshow('sda', dst)
    cimage = np.array(thresh.shape, np.uint8)
    cimage = 120
    dst = cv.add(dst, cimage)
    cv.imshow('tophat', dst)
OpenCV学习笔记-顶帽、黑帽、形态学梯度_第1张图片

二、黑帽
是进行闭运算以后得到的图像与原图像的差。

黑帽运算之后的效果图突出了与原图像轮廓周围的区域更暗的区域,且这一操作和选择的核大小相关。所以黑帽运算用来分离比邻近点暗一些的斑块。
def hat_binary_demo(img):
    gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
    ret, thresh = cv.threshold(gray, 0, 255, cv.THRESH_BINARY | cv.THRESH_OTSU)
    kernel = cv.getStructuringElement(cv.MORPH_RECT, (15, 15))
    dst = cv.morphologyEx(thresh, cv.MORPH_BLACKHAT, kernel)
    cv.imshow('blackhat', dst)

OpenCV学习笔记-顶帽、黑帽、形态学梯度_第2张图片

三、形态学梯度
形态学梯度是膨胀和腐蚀的差别,结果看上去就像前景物体的轮廓。计算的梯度常见的有三种:

基本梯度:
基本梯度是用膨胀后的图像减去腐蚀后的图像得到差值图像,称为梯度图像,也是OpenCV中支持的计算形态学梯度的方法,而此方法得到的梯度又被称为基本梯度。

内部梯度:
是用原图像减去腐蚀后的图像得到差值图像,称为图像的内部梯度

外部梯度:
图像膨胀后的图像减去原来的图像得到的差值图像,称为图像的外部梯度。

def gradient_demo(img):
    gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
    ret, thresh = cv.threshold(gray, 0, 255, cv.THRESH_BINARY_INV | cv.THRESH_OTSU)
    cv.imshow('thresh', thresh)
    kernel = cv.getStructuringElement(cv.MORPH_RECT, (5,5))
    #基本梯度
    dst = cv.morphologyEx(thresh, cv.MORPH_GRADIENT, kernel)
    cv.imshow('gradient', dst)
    #内部梯度
    erode = cv.erode(img, kernel)
    dst1 = cv.subtract(img, erode)
    cv.imshow('inernal', dst1)
    #外部梯度
    dilate = cv.dilate(img, kernel)
    dst2 = cv.subtract(dilate, img)
    cv.imshow('external', dst2)

我们直接都用原图像直接计算了
OpenCV学习笔记-顶帽、黑帽、形态学梯度_第3张图片

你可能感兴趣的:(#,OpenCV-Python,python,#,OpenCV学习笔记)