赞
踩
- 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()
原图-礼帽-黑帽对比,发现礼帽是毛刺,而黑帽是轮廓,看图片的右下角可知。
如果是个圆(毛刺非常小,因为图像没有绝对的圆,只不过毛刺大小卷积核提取不到),没有了(相对来说,特别小的卷积核也能识别到微小的毛刺)毛刺,效果如何呢?
效果是,失去了作用。说明礼帽和黑帽,是依赖于图像中的毛刺的。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。