opencv前景提取

在很多基础应用中背景检出都是一个非常重要的步骤,技术上来说,我们需要从静止的背景中提取移动的前景,这是大多数背景检出遇到的场景,而现在有一个场景是把静态图像中标注出的视为前景,然后把背景删除,有点类似ps抠图的概念,不过是要计算机自己处理前景和背景区分,自己删除背景图。

查了很多资料,发现opencv中有一个方法可以做到前景的提取,叫做GrabCut。

概念:

GrabCut 算法是由微软剑桥研究院的 Carsten_Rother, Vladimir_Kolmogorov和 Andrew_Blake 在文章《 GrabCut”: interactive foreground extraction using iterated graph cuts》中共同提出的。此算法在提取前景的操作过程中需要很少的人机交互,结果非常好。

函数:

OpenCV 提供了函数:cv2.grabCut()。我们来先看看它的参数: 

• img - 输入图像 

• mask-掩模图像,用来确定那些区域是背景,前景,可能是前景/背景等。可以设置为:cv2.GC_BGD,cv2.GC_FGD,cv2.GC_PR_BGD,cv2.GC_PR_FGD,或者直接输入 0,1,2,3 也行。 

• rect - 包含前景的矩形,格式为 (x,y,w,h) 

• bdgModel, fgdModel - 算法内部使用的数组. 你只需要创建两个大小为 (1,65),数据类型为 np.float64 的数组。 

• iterCount - 算法的迭代次数 

• mode 可以设置为 cv2.GC_INIT_WITH_RECT 或 cv2.GC_INIT_WITH_MASK,也可以联合使用。这是用来确定我们进行修改的方式,矩形模式或者掩模模式 

人工不干预的效果总体还行,但是有些地方的前景背景区分不是太好,如果需要很精细的话可能需要人工干预,但是我这里的场景倒是不需要结果很精细。

人工不干预还有一个难点就是怎么标注前景,这里就用到opencv的dnn物体检测,检测出物体后,用检测出的主要的物体的位置来做为GrabCut算法的前景矩形,最后得出的结果还可以接受,效果图如下:(背景被置成了黑色)


GrabCut 算法还可以做交互式前景提取的方法,让用户自己标注前景背景,这样出来的效果就像自动抠图一样,设想就类似该网站实现的效果:https://clippingmagic.com/

网友评论

1条评论

发表

网友评论

1条评论

发表

最新评论

抓痒臭臭耙 2 0

监控偷拍大师

04月23日 11:54

推荐文章

彩龙

Copyright © 2008-2019 彩龙社区(http://www.clzg.cn) 版权所有 All Rights Reserved.

免责声明: 本网不承担任何由内容提供商提供的信息所引起的争议和法律责任。

经营许可证编号:滇B2-20090009-7

下载我家昆明APP 下载彩龙社区APP