【OpenCV Python】核心操作--形态学转换

     形态学转换是针对图像形状进行的简单操作,一般是指针对二值化图像进行的操作,常见的形态学转换包括腐蚀,膨胀,开运算等。

1.腐蚀

顾名思义,腐蚀是对前景物体的边缘进行腐蚀掉,形成如现实中一样的腐蚀效果,其原理如下:

卷积核沿着图像滑动,如果卷积核对应区域的图像像素值都是1,则卷积核中心对应的像素值保持不变,反之则全变成0,所以在图像边缘区域,部分为0,部分为1的区域都会变成0,再往里面则会保持不变。

opencv提供erode(src, kernel,iterations)函数进行腐蚀操作,而且腐蚀操作,也可以去除二值化图形里的一些噪点

例如:

img =cv2.imread("test2.png")

kernel = np.ones((5,5),np.uint8)

dst = cv2.erode(img,kernel)


可以看出,相对于左边原图,右边腐蚀之后的图形有明显腐蚀效果,而且噪声被除去

2.膨胀

膨胀可以理解为腐蚀的反操作,膨胀的原理是:

同样的卷积核沿着图像滑动,只要卷积核对应的图像像素值有一个是1,则这块区域全部变成1.

使用cv2.dilate(src , kernel)函数就可以实现膨胀操作

例如:

img= cv2.imread("test2.png")

kernel= np.ones((5,5), np.uint8)

dst= cv2.dilate(img,kernel)

  

屏幕剪辑的捕获时间:2018/4/9 21:11

 

3.开运算:

开运算就是先进行腐蚀,在进行膨胀,opencv提供函数cv2.morphologyEx(src, 运算方式,kernel)

来实现开运算

值得注意的是:

 1)如果先进行腐蚀去除了噪点,但原图形的形状也被破坏,此时再使用膨胀就可以恢复回去,这是开运算存在的意义

 2)直接使用cv2.morphologyEx和先使用cv2.erode再使用cv2.dilate函数的效果一样

 

例如:

img =cv2.imread("test2.png")

kernel = np.ones((5,5), np.uint8)

dst=cv2.morphologyEx(img, cv2.MORPH_OPEN,kernel)

  

屏幕剪辑的捕获时间:2018/4/9 21:22

 

 

 

4.闭运算

闭运算就是开运算的逆过程,先进行膨胀,在腐蚀,原理和开运算一样,可以用于去除二值化图像的背景色噪点。

例如:

img =cv2.imread("test.png")

kernel =np.ones((5,5) , np.uint8)

dst=cv2.morphologyEx(img, cv2.MORPH_CLOSE,kernel)

  

屏幕剪辑的捕获时间:2018/4/9 21:28

 

可以看出白色图形里的黑色噪点已经被去除。

 

 

5.形态学梯度:

其实就是图像的膨胀和腐蚀之后两张图形的差,其结果就像原图形的轮廓

例如:

 

img = cv2.imread("test2.png")

kernel = np.ones((5,5) , np.uint8)

dst= cv2.morphologyEx(img, cv2.MORPH_GRADIENT,kernel)

 

 屏幕剪辑的捕获时间: 2018/4/9 21:31

 

 

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值