1、腐蚀 cv2.erode()
可以删除图像中的噪音点。
可以删除毛边。
分割图像(当图像连接的不够紧密时) 。
img = cv2.erode(src=*,kernel=*,anchor=*,iterations=*,borderType=*,borderValue=*)
img:目标图像。
src:原始图像。
kernel:腐蚀核大小。
anchor:锚点位置,默认是:(-1,-1),核的中心。
iterations:腐蚀操作迭代次数。
borderType、borderValue:边界样式,边界值,使用默认即可。
import cv2
import numpy as nppie = cv2.imread('pie.png') # 圆
h,w = pie.shape[:2] # 图像的高,宽
pie[int(h/2-2):int(h/2+2),50:w-50]=0 # 在圆中间画一条线img1 = cv2.erode(src=pie,kernel=(11,11),iterations=3) # 腐蚀cv2.imshow('pie',pie)
cv2.imshow('img1',img1)
cv2.waitKey(0)
cv2.destroyAllWindows()
2、膨胀 cv2.dilate()
图像沿着边缘向外扩展的操作。
img = cv2.dilate(src=*,kernel=*,anchor=*,iterations=*,borderType=*,borderValue=*)
img:目标图像。
src:原始图像。
kernel:腐蚀核大小。
anchor:锚点位置,默认是:(-1,-1),核的中心。
iterations:腐蚀操作迭代次数。
borderType、borderValue:边界样式,边界值,使用默认即可。
import cv2
import numpy as nppie = cv2.imread('pie.png') # 圆
h,w = pie.shape[:2] # 图像的高,宽
pie[int(h/2-2):int(h/2+2),50:w-50]=0 # 在圆中间画一条线img1 = cv2.dilate(src=pie,kernel=(11,11),iterations=4)cv2.imshow('pie',pie)
cv2.imshow('img1',img1)
cv2.waitKey(0)
cv2.destroyAllWindows()
3、形态学通用函数 cv2.morphologyEx()
img = cv2.morphologyEx(src=*,op=*,kernel=*,anchor=*,iterations=*,borderType=*,borderValue=*)
img:目标图像。
src:原始图像。
op:操作方式,常见操作方式如下表所示:
操作方式 | 解释 |
MOREPH_ERODE | 腐蚀 |
MOREPH_DILATE | 膨胀 |
MOREPH_OPEN | 开运算 |
MOREPH_CLOSE | 闭运算 |
MOREPH_GRADIENT | 形态学梯度 |
MOREPH_TOPHAT | 礼貌运算 |
MOREPH_BLACKHAT | 黑帽运算 |
kernel:腐蚀核大小。
anchor:锚点位置,默认是:(-1,-1),核的中心。
iterations:腐蚀操作迭代次数。
borderType、borderValue:边界样式,边界值,使用默认即可。
4、开运算 cv2.morphologyEx()
先做腐蚀,在做膨胀操作。
import cv2
import numpy as nppie = cv2.imread('pie.png') # 圆
h,w = pie.shape[:2] # 图像的高,宽
pie[int(h/2-1):int(h/2+1),50:w-50]=255 # 在圆中间画一条线img1 = cv2.morphologyEx(src=pie,op=cv2.MORPH_OPEN,kernel=(11,11),iterations=3)cv2.imshow('pie',pie)
cv2.imshow('img1',img1)
cv2.waitKey(0)
cv2.destroyAllWindows()
5、闭运算
先做膨胀操作,在做腐蚀操作。
import cv2
import numpy as nppie = cv2.imread('pie.png') # 圆
h,w = pie.shape[:2] # 图像的高,宽
pie[int(h/2-1):int(h/2+1),50:w-50]=0 # 在圆中间画一条线img1 = cv2.morphologyEx(src=pie,op=cv2.MORPH_CLOSE,kernel=(11,11),iterations=3)cv2.imshow('pie',pie)
cv2.imshow('img1',img1)
cv2.waitKey(0)
cv2.destroyAllWindows()
6、形态学梯度
膨胀操作后的图像 - 腐蚀操作后的图像 = 图像边缘
import cv2pie = cv2.imread('pie.png') # 圆img1 = cv2.morphologyEx(src=pie,op=cv2.MORPH_GRADIENT,kernel=(11,11),iterations=3)cv2.imshow('pie',pie)
cv2.imshow('img1',img1)
cv2.waitKey(0)
cv2.destroyAllWindows()
7、礼帽运算
原始图像 - 开运算图像 = 礼帽运算
可以得到原始图像的噪音点。
import cv2
import numpy as nppie = cv2.imread('pie.png')h,w = pie.shape[:2]
pie[int(h/2-1):int(h/2+1),:]=255 # 在圆中间画一条线img1 = cv2.morphologyEx(src=pie,op=cv2.MORPH_TOPHAT,kernel=(11,11))cv2.imshow('pie',pie)
cv2.imshow('img1',img1)
cv2.waitKey(0)
cv2.destroyAllWindows()
8、黑帽运算
原始图像 - 闭运算图像 = 黑帽运算
import cv2
import numpy as nppie = cv2.imread('pie.png')h,w = pie.shape[:2]
pie[int(h/2-1):int(h/2+1),:]=255 # 在圆中间画一条线img1 = cv2.morphologyEx(src=pie,op=cv2.MORPH_BLACKHAT,kernel=(11,11))cv2.imshow('pie',pie)
cv2.imshow('img1',img1)
cv2.waitKey(0)
cv2.destroyAllWindows()
9、核函数
kernel = cv2.getStructuringElement(shape=*,ksize=,anchor=*)
kernel:核矩阵。
shape:内核形状,常见的参数如下:
参数 | 解释 |
MORPH_RECT | 所有元素都是1 |
MORPH_ELLIPSE | 椭圆形位置为1 |
MORPH_CROSS | 十字形位置是1 |
ksize:内核大小。
anchor:内核锚点,默认为:(-1,-1),核中心位置。
import cv2kernel1 = cv2.getStructuringElement(shape=cv2.MORPH_RECT,ksize=(5,5))
kernel2 = cv2.getStructuringElement(shape=cv2.MORPH_ELLIPSE,ksize=(5,5))
kernel3 = cv2.getStructuringElement(shape=cv2.MORPH_CROSS,ksize=(5,5))
print(kernel1)
print(kernel2)
print(kernel3)cv2.waitKey(0)
cv2.destroyAllWindows()
[[1 1 1 1 1] [[0 0 1 0 0] [[0 0 1 0 0][1 1 1 1 1] [1 1 1 1 1] [0 0 1 0 0][1 1 1 1 1] [1 1 1 1 1] [1 1 1 1 1][1 1 1 1 1] [1 1 1 1 1] [0 0 1 0 0][1 1 1 1 1]] [0 0 1 0 0]] [0 0 1 0 0]]