Aim:掌握形态学操作——腐蚀、膨胀、|基本| 开运算、闭运算 、梯度 |变体|。
根据图像形状(二值化图像)进行的简单操作。参数:(原始图像,结构化元素\核)。
腐蚀
- 腐蚀前景物体的边界。
- 去除白噪声或者断开两个连在一起的物体。
代码演示
# coding=utf8
import cv2
import numpy as np
while(1):
img=cv2.imread('123.jpg',0)
kernel=np.ones((5,5),np.uint8)
erosion=cv2.erode(img,kernel,iterations=1)
k=cv2.waitKey(0)&0xFF
if k==27:
break
cv2.imshow('1',erosion)
膨胀
- 与卷积核对应的原图像的像素值只要有一个1,中心元素像素值为1.增加图中白色区域。
- 去噪:先腐蚀,再膨胀。
- dilation=cv2.dilate(img,kernel,iterations=1)
开运算
- 定义:先腐蚀再膨胀。
- opening=cv2.morphologyEx(img,cv2.MORPH_OPEN,kernel)
闭运算
- 定义:先膨胀再腐蚀。
- 用处:填充前景物体中的小洞或者小黑点。
- closing=cv2.morphologyEx(img,cv2.MORPH_CLOSE,kernel)
形态学梯度
获取前景物体的轮廓。
- gradiant=cv2.morphologyEx(img,cv2.MORPH_GRADIENT,kernel)
礼帽
- 原始图像-开运算得到图像。
- tophat=cv2.morphologyEx(img,cv2.MORPH_TOPHAT,kernel)
黑帽
- 闭运算得到图像-原始图像。
- blackhat=cv2.morphologyEx(img,cv2.MORPH_BLACKHAT,kernel)
结构化元素Element
- 使用numpy构建各种特征图形的矩阵。(正方形,椭圆,十字形)
- 正方形(五行五列):cv2.getStructuringElement(cv2.MORPH_RECT,
(5,5)) - 椭圆(五行五列):cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(5,5))
- 十字形(五行五列):cv2.getStructuringElement(cv2.MORPH_CROSS,(5,5))