9.opencv-python;cv2库;形态学;MORPH_TOPHAT礼帽与MORPH_BLACKHAT黑帽

import cv2 #opencv读取的格式是BGR
import numpy as np
import matplotlib.pyplot as plt#Matplotlib是RGB
%matplotlib inline 
 
# 读取
img=cv2.imread('lena.jpg')
img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
 
# 图像二值化
ret, thresh1 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_BINARY)

# 定义卷积核
kernel = np.ones((3,3),np.uint8) 

#礼帽,原图像减去先腐蚀后膨胀的图像,原图像-开运算,剩下毛刺
tophat = cv2.morphologyEx(thresh1, cv2.MORPH_TOPHAT, kernel)
cv2.imshow('tophat', tophat)
cv2.waitKey(0)
cv2.destroyAllWindows()

#黑帽,原图像减去先膨胀后腐蚀的图像(先膨胀毛刺变大,是在毛刺的根部变大,后腐蚀毛刺减小但根部没去除),原图像减去闭运算,相减后剩下毛刺的根部,毛刺的根部连成线成为轮廓。为了证明这个思想,下面做实验。
blackhat  = cv2.morphologyEx(thresh1,cv2.MORPH_BLACKHAT, kernel)
cv2.imshow('blackhat ', blackhat )
cv2.waitKey(0)
cv2.destroyAllWindows()

原图-礼帽-黑帽对比,发现礼帽是毛刺,而黑帽是轮廓,看图片的右下角可知。

9.opencv-python;cv2库;形态学;MORPH_TOPHAT礼帽与MORPH_BLACKHAT黑帽_第1张图片

如果是个圆(毛刺非常小,因为图像没有绝对的圆,只不过毛刺大小卷积核提取不到),没有了(相对来说,特别小的卷积核也能识别到微小的毛刺)毛刺,效果如何呢?

9.opencv-python;cv2库;形态学;MORPH_TOPHAT礼帽与MORPH_BLACKHAT黑帽_第2张图片

 效果是,失去了作用。说明礼帽和黑帽,是依赖于图像中的毛刺的。

你可能感兴趣的:(opencv,opencv)