我在C ++中找不到这样的例子,所以如果有人能告诉我那就太好了!感谢。
答案 0 :(得分:2)
使用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_RECT
和GC_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 );