python图像二值化 腐蚀 膨胀_python 简单图像处理(13) 二值图腐蚀和膨胀,开运算、闭运算...

我们直接看图吧

我们把粗框内的区域看作原图像

假设有一个圆在图像空间移动,取一个点作为圆的中心,若圆的区域被完全包含在原图像中

则我们把它放到腐蚀后的区域中

若只有一部分在原图像区域或没有一个点在原图区域中,我们则不会把它放在腐蚀区中

显然,粗框区域腐蚀后会变成内部填充框区域

而膨胀却恰恰相反

把粗框线看作原图的话,取原图上一点为圆的中心,所以在圆的区域都被放在膨胀区

显然,膨胀后,原图会变成外边框的区域

上面,我们是以圆为窗的,事实上你可以使用任意窗形,不过最好有一个中心点

好啦,我们来看看利用腐蚀和膨胀有什么效果吧

importcvdefTwo(image):

w=image.width

h=image.height

size=(w,h)

iTwo=cv.CreateImage(size,8,1)foriinrange(h):forjinrange(w):

iTwo[i,j]=0ifimage[i,j]<220else255returniTwodefCorrode(image):

w=image.width

h=image.height

size=(w,h)

iCorrode=cv.CreateImage(size,8,1)

kH=range(2)+range(h-2,h)

kW=range(2)+range(w-2,w)foriinrange(h):forjinrange(w):ifiinkHorjinkW:

iCorrode[i,j]=255elifimage[i,j]==255:

iCorrode[i,j]=255else:

a=[]forkinrange(5):forlinrange(5):

a.append(image[i-2+k,j-2+l])ifmax(a)==255:

iCorrode[i,j]=255else:

iCorrode[i,j]=0returniCorrodedefExpand(image):

w=image.width

h=image.height

size=(w,h)

iExpand=cv.CreateImage(size,8,1)foriinrange(h):forjinrange(w):

iExpand[i,j]=255foriinrange(h):forjinrange(w):ifimage[i,j]==0:forkinrange(5):forlinrange(5):if-1

iExpand[i-2+k,j-2+l]=0returniExpand

image=cv.LoadImage('pic3.jpg',0)

iTwo=Two(image)

iCorrode=Corrode(iTwo)

iExpand=Expand(iTwo)

cv.ShowImage('image',image)

cv.ShowImage('iTwo',iTwo)

cv.ShowImage('iCorrode',iCorrode)

cv.ShowImage('iExpand',iExpand)

cv.WaitKey(0)

看看运行效果吧

第一幅图是原图的灰度图,第二幅图是对其做了二值处理

对于二值图像来说,对黑色进行腐蚀与对白色进行膨胀得到的效果是一样的,

对白色进行腐蚀与对黑色进行膨胀的得到的效果是一样的。当然,你需要像我一样选取一个矩形窗作为移动的框

我们来验证一下

我们先将图像反色,再处理。验证了上面的话

我们来看看更复杂的图像吧

我们来讲两个概念:开运算和闭运算

开运算是对图像先腐蚀后膨胀

闭运算是对图像先膨胀后腐蚀

在前面的基础上,我们对腐蚀后的图像做膨胀操作得到的就是开运算的结果

对膨胀后的图像做腐蚀操作得到的就是闭运算的结果

我们来看看效果

(例子中的图片,如有版权问题,请作者与我联系,谢谢)

开运算能够除去孤立的小点,毛刺和小桥,而总的位置和形状不变

闭运算能够填平小湖(小孔),弥合小裂缝,而总的位置和形状不变

不同的窗口对运算结果会有影响

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值