python-opencv函数笔记cv2.erode,cv2.dilate,cv2.morphologyEx

形态转换函数用法

结构元素可以是矩形/椭圆/十字形,可以用cv2.getStructuringElement()来生成不同形状的结构元素,比如:

kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))  # 矩形结构
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5, 5))  # 椭圆结构
kernel = cv2.getStructuringElement(cv2.MORPH_CROSS, (5, 5))  # 十字形结构

cv2.erode()

img = cv2.imread('j.bmp', 0)
kernel = np.ones((5, 5), np.uint8)
erosion = cv2.erode(img, kernel)  # 腐蚀

cv2.dilate()

cv2.morphologyEx(img, op, kernel)
腐蚀和膨胀是针对图片中的白色部分!腐蚀去除小白点,膨胀去除小黑点。

  参数op的取值	含义 			
  MORPH_ERODE:		腐蚀(变瘦),与调用腐蚀函数cv2.erode效果相同
  MORPH_DILATE:	膨胀(变胖),与调用膨胀函数cv2.dilate效果相同
  MORPH_OPEN:		开运算(去小白点),先腐蚀再膨胀,等同于dilate(erode(src,kernal)),
  					如何记:先腐蚀,小白点没了,会分开物体,就是开运算
  					其作用是:分离物体、平滑边界(去掉凸起)、移除白点
  MORPH_CLOSE:		闭运算(去小黑点),先膨胀再腐蚀,等同于erode(dilate(src,kernal)),
  					如何记:先膨胀,白色部分扩张,消除(闭合)物体里面的小黑洞,所以叫闭运算
  					闭运算用于填充图像内部的小空(黑)洞、填充图像的凹陷等
  					闭运算可以用来排除小黑洞,连接被误分为许多小块的对象 			
  MORPH_GRADIENT:	梯度图,用膨胀图减腐蚀图,等同于dilate(src,kernal)−erode(src,kernal),
  					可以用于获得图像中物体的轮廓,可以突出团块(blob)的边缘,保留物体的边缘轮廓。 			
  MORPH_TOPHAT:	顶帽,又称礼帽,用原图像减去开运算后的图像,等同于src−open(src,kernal),
  					可以用于获得原图像中比周围亮的区域
  					简单理解:去除白色重叠部分 			
  MORPH_BLACKHAT:	黑帽,闭运算图像减去原图像,等同于close(src,kernal)−src,
  					可以用于获取原图像中比周围暗的区域
  					简单理解:保留白色重叠部分 			
  MORPH_HITMISS: 	击中击不中变换,用于匹配处理图像中是否存在核对应的图像,
  					匹配时,需要确保核矩阵非0部分和为0部分都能匹配,
  					注意:该变换只能处理灰度图像。

形态学操作一般作用于二值化图(也可直接作用于原图),来连接相邻的元素或分离成独立的元素。

		![偶然觉得腐蚀、膨胀与美颜之间的关系](https://img-blog.csdnimg.cn/20210406232547430.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDc0NzMwOQ==,size_16,color_FFFFFF,t_70#pic_center)

更多图片效果实例
更多函数参考

你可能感兴趣的:(学习笔记,opencv)