数字图像处理_09._(轮廓提取应用实例(选择金鱼))

在学习了轮廓提取的方法之后,以选择金鱼提取作为实例:
具体的步骤可分为:

1.获取金鱼图片,以三通道进行读取。
2.将金鱼图片通道进行分离。
3.分析各通道主要影响。
4.用影响最大的通道进行变换。
5.将图片进行闭运算。
6.画出轮廓并进行填充以得到掩膜(mask)。
7.将mask作为通道并入图片得到透明背景的图片。

具体实现代码:
1获取金鱼图片,以三通道进行读取。
2.将金鱼图片通道进行分离。

img=cv.imread('pic/goldfish500x500.jpg')
show(img)
b,g,r=cv.split(img)
show(np.hstack([b,g,r]))

在这里插入图片描述
在这里插入图片描述
3 经过分析得知,r通道对图片其主要影响,因此对r通道进行处理更容易得出金鱼轮廓。

edge1=cv.Canny(r,5,50)
show(edge1)

在这里插入图片描述
4 轮廓过于不清晰,因此使用闭运算对使图片轮廓内部相互连接
首先设置一个3*3的正方形结构元,然后用结构元K进行闭运算迭代3次.

K=cv.getStructuringElement(cv.MORPH_RECT,(3,3))
#设置一个3*3的正方形结构元
edge2=cv.morphologyEx(edge1,cv.MORPH_CLOSE,K,iterations=3)
#用结构元K进行闭运算
show(edge2)

在这里插入图片描述
5 用OpenCV轮廓提取对图片进行轮廓的提取,并绘制出轮廓已获得掩膜的透明通道。

cnts,hiers=cv.findContours(edge2,cv.RETR_EXTERNAL,cv.CHAIN_APPROX_SIMPLE)
len(cnts)
mask=np.zeros((500,500),np.uint8)
cv.drawContours(mask,cnts,0,255,-1)
show(mask)

在这里插入图片描述

6.将mask作为第四个通道加入到图片中即可得到背景为透明的图片

goldfish=np.zeros((500,500,4),np.uint8)
goldfish[:,:,:3]=img
goldfish[:,:,3]=mask
show(goldfish)
cv.imwrite('test/goldfish.png',goldfish)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值