opencv图像处理④

目录

形态学—腐蚀操作

形态学—膨胀操作 

 开运算与闭运算

 剃度运算

 礼帽与黑帽


形态学—腐蚀操作

对于上示图像,发现有像毛一样的东西,如何去把它去掉?(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()

 

 开运算与闭运算

 两种参数,由下方两个指定

  • cv2.MORPH_OPEN
  • cv2.MORPH_CLOSE

#开:先腐蚀,再膨胀

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()

 

  • cv2.MORPH_GRADIENT   梯度参数

gradient=cv2.morphologyEx(pie,cv2.MORPH_GRADIENT,kernel)

cv2.imshow('gradient',gradient)

cv2.waitKey(0)

cv2.destroyAllWindows()

 礼帽与黑帽

  • cv2.MORPH_TOPHAT  礼帽=原始输入-开运算结果

如迪哥例子,原始输入带有毛边,开运算是先腐蚀再膨胀去掉了毛边,所以礼帽剩下的就是毛边

  • cv2.MORPH_BLACKHAT  黑帽=闭运算-原始输入 

闭运算是先膨胀再腐蚀,仍然带有毛边,减去原始输入,应剩下一个迪哥的轮廓

#礼帽

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()

猜你喜欢

转载自blog.csdn.net/weixin_58176527/article/details/125082597