形态学操作
导入库
import cv2
import numpy as np
原始图像
形态学腐蚀
可以通过腐蚀操作将图像”变瘦“
通过cv2.erode( image,kernel,iterations)函数 可以实现
image:要操作的图片
kernel:腐蚀的核函数
iterations:迭代次数,迭代次数越多,图像越不明显
img = cv2.imread('dige.png')
kernel = np.ones((3,3),np.uint8)
erosion = cv2.erode(img,kernel=kernel,iterations=1)
#iterations是迭代次数,迭代次数越多,图像越不明显
可以看到周围的细线条消失了,并且图像变细
形态学膨胀
可以通过膨胀操作将图像”变胖“
通过cv2.dilate( image,kernel,iterations)函数 可以实现
image:要操作的图片
kernel:膨胀的核函数
iterations:迭代次数,迭代次数越多,图像越明显
img = cv2.imread('dige.png')
kernal = np.ones((3,3),np.uint8)
dilate = cv2.dilate(erosion,kernel=kernal,iterations=1)
可以看出,图像整体变粗
开运算与闭运算
开运算:先腐蚀再膨胀
img = cv2.imread('dige.png')
kernel = np.ones((3,3),np.uint8)
opening = cv2.morphologyEx(img,cv2.MORPH_OPEN,kernel)
可以看出开运算后的图像,相比与原来的图像线条粗细没有变化,只是少了周围的细线条
闭运算:先膨胀再腐蚀
img = cv2.imread('dige.png')
kernel = np.ones((3,3),np.uint8)
closeing = cv2.morphologyEx(img,cv2.MORPH_CLOSE,kernel)
梯度运算:先把原图像膨胀和腐蚀得到两个图像,然后梯度图像 = 膨胀图像 - 腐蚀图像
pie = cv2.imread('pie.png')
kernel = np.ones((7,7),np.uint8)
gradient = cv2.morphologyEx(pie,cv2.MORPH_GRADIENT,kernel)
这里以一个圆的图像为例子
原图像是这样的
经过梯度运算后只保留了边框出来
礼帽和黑帽
礼帽 = 原始输入 - 开运算结果
取出亮度低的地方
黑帽 = 闭运算 - 原始输入
取出亮度高的地方
img = cv2.imread('dige.png')
kernel = np.ones((3,3),np.uint8)
tophat = cv2.morphologyEx(img,cv2.MORPH_TOPHAT,kernel)
black = cv2.morphologyEx(img,cv2.MORPH_BLACKHAT,kernel)