形态学操作
1.顶帽:原图与开操作之间的差值图像
2.黑帽:闭操作与源图像的差值图像
3.形态学梯度
基本梯度:基本梯度是用膨胀后的图像减去腐蚀后的图像得到差值图像,称为梯度图像也是opencv中支持的计算形态学梯度的方法。
内部梯度:用原图减去腐蚀之后的图像得到的差值图像
外部梯度:图像膨胀之后再减去原来的图像得到的差值图像
代码奉上:
import cv2
import numpy as np
def tophat_demo(image): #顶帽
gray=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY) #转化为灰度图
kernel=cv2.getStructuringElement(cv2.MORPH_RECT, (15,15)) #获得形状
dst=cv2.morphologyEx(gray, cv2.MORPH_TOPHAT, kernel) #形态学操作之顶帽
cimage=np.array(gray.shape, np.uint8) #增加亮度
cimage=100
dst=cv2.add(dst,cimage)
cv2.imshow("tophat_demo",dst)
def blackhat_demo(image): #黑帽
gray=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY) #转化为灰度图
kernel=cv2.getStructuringElement(cv2.MORPH_RECT, (15,15)) #获得形状
dst=cv2.morphologyEx(gray, cv2.MORPH_BLACKHAT, kernel) #形态学操作之黑帽
cimage=np.array(gray.shape, np.uint8) #增加亮度
cimage=100
dst=cv2.add(dst,cimage)
cv2.imshow("blackhat_demo",dst)
def binaryhat_demo(image): #黑帽二值化或者顶帽二值化
gray=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY) #转化为灰度图
ret,binary=cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY|cv2.THRESH_OTSU) #二值化处理
kernel=cv2.getStructuringElement(cv2.MORPH_RECT, (15,15)) #获得形状
dst=cv2.morphologyEx(binary, cv2.MORPH_BLACKHAT, kernel) #形态学操作之黑帽或者顶帽
cimage = np.array(gray.shape, np.uint8) # 增加亮度
cimage = 100
dst = cv2.add(dst, cimage)
cv2.imshow("binaryhat_demo",dst)
def gradienthat1_demo(image): #基本梯度
gray=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY) #转化为灰度图
ret,binary=cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY|cv2.THRESH_OTSU) #二值化处理
kernel=cv2.getStructuringElement(cv2.MORPH_RECT, (3,3)) #获得形状
dst=cv2.morphologyEx(binary, cv2.MORPH_GRADIENT, kernel) #形态学操作之梯度
cv2.imshow("gradienthat1_demo",dst)
def gradienthat2_demo(image): #内梯度或者外梯度
kernel=cv2.getStructuringElement(cv2.MORPH_RECT, (3,3)) #获得形状
dm=cv2.dilate(image, kernel) #进行膨胀
em=cv2.erode(image,kernel) #进行腐蚀
dst1=cv2.subtract(image,em) #内梯度 原图-腐蚀
dst2 = cv2.subtract(dm,image) # 外梯度 膨胀-原图
cv2.imshow("internal内梯度",dst1) #
cv2.imshow("external外梯度", dst2)
print("---------------hello------------------")
src=cv2.imread("test.png")
src1=cv2.imread("open&close.png")
cv2.imshow("source_image原图",src)
tophat_demo(src)
blackhat_demo(src)
binaryhat_demo(src)
gradienthat1_demo(src1)
gradienthat2_demo(src1)
cv2.waitKey(0)
cv2.destroyAllWindows()
原图:
顶帽:
黑帽:
基本梯度:
内外梯度: