python-opencv,基于Python-形态学处理-开运算、闭运算、顶帽、黑帽运算

发布时间 2023-08-25 16:39:09作者: hotzhml

开、闭、梯度、顶帽、黑帽运算

开运算:腐蚀+膨胀
闭运算:膨胀+腐蚀
梯度:膨胀与腐蚀的差值图像
顶帽:原图-开运算
黑帽:原图-闭运算

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()