目录
形态学—腐蚀操作
形态学—膨胀操作
开运算与闭运算
剃度运算
礼帽与黑帽
对于上示图像,发现有像毛一样的东西,如何去把它去掉?(erode函数)
首先我们先读取这张照片
img=cv2.imread('dige.png')
cv2.imshow('img',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
#(5,5)是盒的大小
kernel=np.ones((5,5),np.uint8)
#iterations是迭代次数,即腐蚀次数
erosion=cv2.erode(img,kernel,iterations=1)
cv2.imshow('erosion',erosion)
cv2.waitKey(0)
cv2.destroyAllWindows()
处理后的结果如下图,可以看到,毛边没有了,而且线条变细了
形态腐蚀,即在一个盒内周围区域的颜色相同则不变,颜色不同(如圆的边缘部分的盒中有黑有白),就会将这个点腐蚀掉(变为黑色),每迭代一次就会腐蚀一次(圆越来越小)
pie=cv2.imread('pie.png')
cv2.imshow('pie',pie)
cv2.waitKey(0)
cv2.destroyAllWindows()
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()
仍然采用迪哥图片,先读取图片,然后进行腐蚀操作,腐蚀后发现迪哥的线条变细了,然后开始进行膨胀操作。(dilate函数)
kernel =np.ones((3,3),np.uint8)
#dige_dilate为腐蚀之后的图像
dige_dilate=cv2.dilate(dige_erosion,kernel,iterations=1)
cv2.imshow('dilate',dige_dilate)
cv2.waitKey(0)
cv2.destroyAllWindows()
膨胀操作,盒中框选到了白色,则将其置为白色,与腐蚀操作相反。
pie=cv2.imread('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()
两种参数,由下方两个指定
#开:先腐蚀,再膨胀
img=cv2.imread('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()
#闭:先膨胀,再腐蚀
img=cv2.imread('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()
先腐蚀再膨胀,可以去掉毛刺;先膨胀,再腐蚀,毛刺变的比以前还大了。
剃度运算做三件事,一是对原始图像进行一个膨胀,二是对原始图像进行一个腐蚀,三是用膨胀的减去腐蚀的。(图像当中的减法)
#梯度=膨胀-腐蚀
pie=cv2.imread('pie.png')
kernel=np.ones((7,7),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()
如迪哥例子,原始输入带有毛边,开运算是先腐蚀再膨胀去掉了毛边,所以礼帽剩下的就是毛边
闭运算是先膨胀再腐蚀,仍然带有毛边,减去原始输入,应剩下一个迪哥的轮廓
#礼帽
img=cv2.imread('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()