1、腐蚀与膨胀
2、开运算与闭运算
3、核运算
形态学,即数学形态学(mathematical Morphology),是图像处理过程中一个非常重要的研究方向。形态学主要从图像内提取分量信息,该分量信息通常对于表达和描绘图像的形状具有重要意义,通常是图像理解是所使用的最本质的形状特征。例如,在识别手写数字时,能够通过形态学运算得到其骨架信息,在具体识别时,仅针对其骨架进行运算即可。形态学处理在视觉检测,文字识别、医学图像处理、图像压缩编码等领域都有非常重要的应用。
1.腐蚀
腐蚀是最基本的形态学操作之一,它能够将图像的边界点消除,使图像沿着边界向内收缩,也可以将小于指定结构体元素的部分去除。
```python
img = cv2.imread('j.bmp')
cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()``
膨胀
img = cv2.imread('j.bmp')
cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
开运算
# 开:先腐蚀,再膨胀
img = cv2.imread('j.bmp')
kernel = np.ones((5,5),np.uint8)
opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
cv2.imshow('opening', opening)
cv2.waitKey(0)
cv2.destroyAllWindows()
闭运算
# 闭:先膨胀,再腐蚀
img = cv2.imread('j.bmp')
kernel = np.ones((5,5),np.uint8)
closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)
cv2.imshow('closing', closing)
cv2.waitKey(0)
cv2.destroyAllWindows()
礼帽与黑帽
#礼帽
img = cv2.imread('j.bmp')
tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel)
cv2.imshow('tophat', tophat)
cv2.waitKey(0)
cv2.destroyAllWindows()
#黑帽
img = cv2.imread('j.bmp')
blackhat = cv2.morphologyEx(img,cv2.MORPH_BLACKHAT, kernel)
cv2.imshow('blackhat', blackhat )
cv2.waitKey(0)
cv2.destroyAllWindows()
案例:检测直线
img=cv2.imread('morph01.png')
img_cvt = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
ret,img_thr = cv2.threshold(img_cvt,150,255,cv2.THRESH_BINARY)
kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(14,1))
dst1 = cv2.dilate(img_thr,kernel,iterations=1)
kernel2 = cv2.getStructuringElement(cv2.MORPH_RECT,(1,14))
dst2 =cv2.dilate(img_thr,kernel2,iterations=1)
dst=cv2.bitwise_and(dst2,dst1)
cv2.imshow("img_cvt",img_cvt)
cv2.imshow("img_thr",img_thr)
cv2.imshow("dst1",dst1)
cv2.imshow("dst2",dst2)
cv2.imshow("dst",dst)
cv2.imwrite("dst.jpg",dst)
cv2.waitKey(0)
cv2.destroyAllWindows()
© Fu Xianjun. All Rights Reserved.