目录
一、图像腐蚀
简单理论
函数erode
二、图像膨胀
用处
函数dilate
三、开运算
四、闭运算
形态学里转换主要是针对二值图像
两个输入对象:二值图像,卷积核
卷积核的中心点从左到右逐个像素扫描原始图像
被扫描的原始图像中的像素点,只有当卷积核对应的元素值均为1(白色)时,其值才为1(白色),否则为0(黑色)
cv2.erode(scr,kernel,iterations)
scr:原始图像
kernel:卷积核,正方形,生成方式np.ones((5,5),np.uint8)
iteration:迭代次数,默认为1
import cv2
import numpy as np
img1=cv2.imread("/Users/admin/Desktop/opencv/erode.bmp",cv2.IMREAD_UNCHANGED)
img=cv2.resize(img1,None,fx=0.5,fy=0.5)
k=np.ones((5,5),np.uint8)
result1=cv2.erode(img,k,iterations=1)
result3=cv2.erode(img,k,iterations=3)
cv2.imshow('original', img)
cv2.imshow('result1', result1)
cv2.imshow('result3', result3)
cv2.waitKey(0)
cv2.destroyAllWindows()
经过一次腐蚀,原始图像上的毛刺基本没有了,而且图像比原来瘦了一点,
经过三次腐蚀以后图像明显瘦了很多
就是腐蚀操作的逆操作
图像去噪腐蚀以后,原始图像发生改变
膨胀就是把图像返回原始的样子
同腐蚀操作,
形态学里转换主要是针对二值图像
两个输入对象:二值图像,卷积核
被扫描的原始图像中的像素点,只有当卷积核对应的元素值只要有一个为1(白色)时,其值就为1(白色),否则为0(黑色)
cv2.dilate(scr,kernel,iterations)
scr:原始图像
kernel:卷积核,正方形,生成方式np.ones((5,5),np.uint8)
iteration:迭代次数,默认为1
import cv2
import numpy as np
img1=cv2.imread("/Users/admin/Desktop/opencv/erode.bmp",cv2.IMREAD_UNCHANGED)
img=cv2.resize(img1,None,fx=0.6,fy=0.6)
k=np.ones((5,5),np.uint8)
result_f=cv2.erode(img,k,iterations=3)
result_p=cv2.dilate(result_f,k,iterations=3)
cv2.imshow('original', img)
cv2.imshow('result_f', result_f)
cv2.imshow('result_p', result_p)
cv2.waitKey(0)
cv2.destroyAllWindows()
开运算就是先腐蚀再膨胀,去掉噪声在还原
cv2.morphologyEx(img,cv2.MORPH_OPEN, kernel)
cv2.MORPH_OPEN:开运算
import cv2
import numpy as np
img1=cv2.imread("/Users/admin/Desktop/opencv/erode.bmp",cv2.IMREAD_UNCHANGED)
img=cv2.resize(img1,None,fx=0.6,fy=0.6)
kernel=np.ones((5,5),np.uint8)
result=cv2.morphologyEx(img,cv2.MORPH_OPEN, kernel)
cv2.imshow('original', img)
cv2.imshow('result', result)
cv2.waitKey(0)
cv2.destroyAllWindows()
就是开运算的逆操作
先膨胀再腐蚀
cv2.morphologyEx(img,cv2.MORPH_CLOSE, kernel)
cv2.MORPH_CLOSE:开运算
import cv2
import numpy as np
img1=cv2.imread("/Users/admin/Desktop/opencv/blackhat.bmp",cv2.IMREAD_UNCHANGED)
img=cv2.resize(img1,None,fx=0.6,fy=0.6)
kernel1=np.ones((5,5),np.uint8)
kernel2=np.ones((10,10),np.uint8)
result1=cv2.morphologyEx(img,cv2.MORPH_CLOSE, kernel1)
result2=cv2.morphologyEx(img,cv2.MORPH_CLOSE, kernel2)
cv2.imshow('original', img)
cv2.imshow('result1', result1)
cv2.imshow('result2', result2)
cv2.waitKey(0)
cv2.destroyAllWindows()
可以通过改变核函数的大小来调节最终的效果