python-opencv,基于Python-形态学处理-开运算、闭运算、顶帽、黑帽运算
开、闭、梯度、顶帽、黑帽运算
开运算:腐蚀+膨胀
闭运算:膨胀+腐蚀
梯度:膨胀与腐蚀的差值图像
顶帽:原图-开运算
黑帽:原图-闭运算
dst = cv2.morphologyEx(img, Type, kernel)
img:进行操作的原图
kernel:噪点大,用大核
Type:
- MORPH_OPEN/MORPH_CLOSE(开闭运算)
- MORPH_GRADIENT(梯度运算)
- MORPH_TOPHAT/MORPH_BLACKHAT(顶黑帽)
便捷API,帮助我们获得指定大小的卷积核
kernel = cv2.getStructuringElement(type, Size)
Type:MORPH_RECT(矩形);MORPH_ELLIPSE(椭圆形部分为1);MORPH_CROSS(十字架部分为1)
Size:(3, 3);(5, 5)
开运算:去除背景的小噪点
闭运算:去除前景里的小噪点
梯度运算:获得增强物体的轮廓
顶帽:得到大图像外的小图形
原图-开运算(即先腐蚀小斑点,在膨胀到原来大小)=保留的小斑点
黑帽:得到大图形内的小图形
黑帽:原图-闭运算(腐蚀掉物体前景里的小斑点)
import cv2 import numpy as np img = cv2.imread('hui2.png',0) kernel = np.ones((5,5),np.uint8) erosion = cv2.erode(img,kernel,iterations = 1) dilation = cv2.dilate(img,kernel,iterations = 1) opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel) closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel) gradient = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel) cv2.imshow("src", img) cv2.imshow("erosion", erosion) cv2.imshow("dilation", dilation) cv2.imshow("opening", opening) cv2.imshow("closing", closing) cv2.imshow("gradient", gradient) cv2.waitKey(0) cv2.destroyAllWindows()