总目录
图像处理总目录←点击这里
六、形态学
6.1、腐蚀操作
效果
- 原数据
img = cv2.imread('./image/dige.png') cv2.imshow('img', img) cv2.waitKey(0) cv2.destroyAllWindows()
- 腐蚀数据(腐蚀一次
iterations = 1
)
“毛刺”没了,字体变细kernel = np.ones((3,3),np.uint8) erosion = cv2.erode(img,kernel,iterations = 1) cv2.imshow('erosion', erosion) cv2.waitKey(0) cv2.destroyAllWindows()
原理
3X3的矩阵,在圆的边界颜色不一样,白色将会被腐蚀掉
- 原数据
pie = cv2.imread('pie.png') cv2.imshow('pie', pie) cv2.waitKey(0) cv2.destroyAllWindows()
- 腐蚀三次
iterations = 1,2,3
过程
白色的圆越来越小pie = cv2.imread('pie.png') kernel = np.ones((30,30),np.uint8) erosion_1 = cv2.erode(pie,kernel,iterations = 1) erosion_2 = cv2.erode(pie,kernel,iterations = 2) erosion_3 = cv2.erode(pie,kernel,iterations = 3) res = np.hstack((erosion_1,erosion_2,erosion_3)) cv2.imshow('res', res) cv2.waitKey(0) cv2.destroyAllWindows()
6.2、膨胀操作
腐蚀的反操作
(1)字体
先腐蚀在膨胀,可以还原字体(去毛刺)
img = cv2.imread('./image/dige.png')
# 先腐蚀
kernel = np.ones((3,3),np.uint8)
dige_erosion = cv2.erode(img,kernel,iterations = 1)
# 在膨胀
kernel = np.ones((3,3),np.uint8)
dige_dilate = cv2.dilate(dige_erosion,kernel,iterations = 1)
cv2.imshow('dilate', dige_dilate)
cv2.waitKey(0)
cv2.destroyAllWindows()
(2)圆圈
pie = cv2.imread('./image/pie.png')
kernel = np.ones((30,30),np.uint8)
dilate_1 = cv2.dilate(pie,kernel,iterations = 1)
dilate_2 = cv2.dilate(pie,kernel,iterations = 2)
dilate_3 = cv2.dilate(pie,kernel,iterations = 3)
res = np.hstack((dilate_1,dilate_2,dilate_3))
cv2.imshow('res', res)
cv2.waitKey(0)
cv2.destroyAllWindows()
6.3、开运算和闭运算
腐蚀和膨胀的结合
-
开运算
cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
先腐蚀,再膨胀# 开:先腐蚀,再膨胀 img = cv2.imread('./image/dige.png') kernel = np.ones((5,5),np.uint8) opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel) cv2.imshow('opening', opening) cv2.waitKey(0) cv2.destroyAllWindows()
-
闭运算
cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)
先膨胀,再腐蚀# 闭:先膨胀,再腐蚀 img = cv2.imread('./image/dige.png') kernel = np.ones((5,5),np.uint8) closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel) cv2.imshow('closing', closing) cv2.waitKey(0) cv2.destroyAllWindows()
6.4、梯度运算
cv2.morphologyEx(pie, cv2.MORPH_GRADIENT, kernel)
梯度=膨胀-腐蚀
pie = cv2.imread('./image/pie.png')
kernel = np.ones((7,7),np.uint8)
dilate = cv2.dilate(pie,kernel,iterations = 5)
erosion = cv2.erode(pie,kernel,iterations = 5)
# 将两张图像横向拼接一起展示
res = np.hstack((dilate,erosion))
cv2.imshow('res', res)
cv2.waitKey(0)
cv2.destroyAllWindows()
用左边的减去右边的图像
gradient = cv2.morphologyEx(pie, cv2.MORPH_GRADIENT, kernel)
cv2.imshow('gradient', gradient)
cv2.waitKey(0)
cv2.destroyAllWindows()
6.5、礼帽与黑帽
-
礼帽 = 原始输入-开运算结果
#礼帽 img = cv2.imread('./image/dige.png') tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel) cv2.imshow('tophat', tophat) cv2.waitKey(0) cv2.destroyAllWindows()
-
黑帽 = 闭运算-原始输入
#黑帽 img = cv2.imread('dige.png') blackhat = cv2.morphologyEx(img,cv2.MORPH_BLACKHAT, kernel) cv2.imshow('blackhat ', blackhat ) cv2.waitKey(0) cv2.destroyAllWindows()