OpenCV grabcut:如何组合GC_INIT_WITH_RECT和GC_INIT_WITH_MASK

时间:2014-07-08 10:45:03

标签: c++ opencv

我在C ++中找不到这样的例子,所以如果有人能告诉我那就太好了!感谢。

2 个答案:

答案 0 :(得分:2)

除了@Aurelius answer

使用GC_INIT_WTH_RECT模式时,grabCut()函数的作用是将矩形外的所有内容设置为GC_BGD,矩形中的所有内容设置为GC_PR_FGD。因此,使用此模式会为您初始化遮罩。

如果您想使用矩形标记您自己的肯定前景/背景,请使用模式GC_INIT_WITH_MASK

创建自己的蒙版,一个零的数组,与img输入grabCut()的大小相同。将矩形内的所有内容都设置为GC_PR_FGD。外面的一切都应该是GC_BGD。然后,如果您知道某个像素是肯定前景,请将其设置为GC_FGD,如果您知道某些内容可能是背景,请将其设置为GC_PR_BGD

GC_值对应于:

GC_BGD     0
GC_FGD     1
GC_PR_BGD  2
GC_PR_FGD  3

当我想使用矩形以及普通用户输入时,这就是我所做的。

答案 1 :(得分:1)

虽然文档中没有明确说明,但GC_INIT_WITH_RECTGC_INIT_WITH_MASK标志是互斥的。如果您将两者都传递给grabCut(),则首选GC_INIT_WITH_RECT,而忽略另一个。

为了证明这一点,以下是OpenCV源代码的相关摘录:

if( mode == GC_INIT_WITH_RECT )
    initMaskWithRect( mask, img.size(), rect );
else // flag == GC_INIT_WITH_MASK
    checkMask( img, mask );