形态学变换
形态学变换一般是处理二值图的腐蚀和膨胀操作,输入二值化图像和核,对图像进行类似卷积的操作
-
核
- 核是一定大小的区域,在原图中进行滑动计算
-
腐蚀
erode
腐蚀过程
- 核在图像上滑动,对应位置相乘,最小值作为核中心点的像素值,二值图像为0和1,所有只要核内有0的值,整合核大小位置都会变为0(黑)。全为1才会变白
- 作用:
- 腐蚀后的效果是白色部分变细,可以过滤白色的噪点。细化连续的前景区域
# 腐蚀 黑色变大 img = cv2.imread('./media/da.png',cv2.IMREAD_GRAYSCALE) _,img1 = cv2.threshold(img,127,255,cv2.THRESH_BINARY_INV) # 二值化为黑底的图片 kernel = np.ones((3,3),dtype=np.uint8) # 核 img2 = cv2.erode(img1,kernel,iterations=2) # iterations腐蚀操作的次数 # cv2.imshow('img',img) cv2.imshow('img1',img1) cv2.imshow('img2',img2) cv2.waitKey(0)
-
膨胀
dilate
膨胀和腐蚀相反
- 核在图像上滑动,对应位置相乘,最大值作为核中心点的像素值,二值图像为0和1,所有只要核内有1的值,整个核大小位置都会变为1(白)。全为0才会变黑
- 作用:
- 可以扩大目标的物体边界,连接断裂的前景部分,填补空洞
# 膨胀 img = cv2.imread('./media/da.png',cv2.IMREAD_GRAYSCALE) _,img1 = cv2.threshold(img,127,255,cv2.THRESH_BINARY_INV) kernel = np.ones((3,3),dtype=np.uint8) # 核 img2 = cv2.dilate(img1,kernel,iterations=2) # cv2.imshow('img',img) cv2.imshow('img1',img1) cv2.imshow('img2',img2) cv2.waitKey(0)
-
开运算
- 先腐蚀,后膨胀
- 作用:
- 分离物体,消除噪点,去除一些小的干扰块
# 开操作 img = cv2.imread('./media/da2.png',cv2.IMREAD_GRAYSCALE) _,img1 = cv2.threshold(img