前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >交互式前景提取

交互式前景提取

作者头像
裴来凡
发布2022-09-21 08:44:55
6110
发布2022-09-21 08:44:55
举报

代码语言:javascript
复制
import cv2
import numpy as np
img=cv2.imread('C:/Users/xpp/Desktop/Lena.png')
mask=np.zeros(img.shape[:2],np.uint8)#定义原始掩模
bg=np.zeros((1,65),np.float64)
fg=np.zeros((1,65),np.float64)
rect=(100,100,200,400)#根据原图设置包含前景的矩形大小
cv2.grabCut(img,mask,rect,bg,fg,5,cv2.GC_INIT_WITH_RECT)#第1次提取前景,矩形模式
imgmask=cv2.imread('C:/Users/xpp/Desktop/Lenas.png')#读取已标注的掩模图像
cv2.imshow('mask image',imgmask)
mask2=cv2.cvtColor(imgmask,cv2.COLOR_BGR2GRAY,dstCn=1)
#根据掩模图像,将掩模图像中白黑色像素对应的原始掩模像素设置为0
mask[mask2==0]=0
#根据掩模图像,将掩模图像中白色像素对应的原始掩模像素设置为1
mask[mask2==255]=1
cv2.grabCut(img,mask,None,bg,fg,5,cv2.GC_INIT_WITH_MASK)#第2次提取前景,掩模模式
mask2=np.where((mask==2)|(mask==0),0,1).astype('uint8')
img=img*mask2[:,:,np.newaxis]#将掩模与原图像相乘获得分割出来的前景图像
cv2.imshow('grabCut',img)#显示获得的前景
cv2.waitKey(0)

算法:交互式前景提取是首先用矩形框指定要提取的前景所在的大致范围,接着执行前景提取算法得到初步结果。然后,用户复制原图像作为掩模图像,用白色标注要提取的前景区域,用黑色标注背景区域。最后,使用掩模图像执行前景提取算法从而获得理想的提取结果。

文献:Rother, C. . (2004). Grabcut : interactive foreground extraction using iterated graph cuts. Proceedings of Siggraph, 23.

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-06-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 图像处理与模式识别研究所 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档