我正在使用OpenCV使用GrabCut分割一些图像。在我的图像上,我想从背景中分割单个对象。我想找到对象的轮廓;我知道它的大致位置,因此我将其中心标记为 FG =前景。然后我将它周围的一个小带标记为 P_BG =可能的背景,这是我希望GrabCut执行分割的区域。最后,图像的其余部分标记为 BG =背景。我不希望GrabCut在这里做任何事情(没有图表,没有颜色模型,没有任何东西)
现在,有4种可能的标签:
问题
P_BG
和P_FG
之间的实际差异是什么?(似乎显而易见但是我可以互换地使用它们并且它什么都没改变?
答案 0 :(得分:1)
它在BG上无能为力,因为它使用这样的像素作为100%确定背景的模型。对于FG像素也是如此。
如果您不使用FG和BG标签,您将看到P_FG和P_BG之间的差异。此P_ *标签用于第一个模型,但可以在下一次迭代中重新标记。
实际上,使用矩形初始化与使用矩形内部的P_FG和其余像素的P_BG相同。
答案 1 :(得分:1)
在OpenCV的当前GrabCut实现中,没有办法让GrabCut完全忽略任何像素。每个像素都用于创建前景色和背景色模型。
如果您想要忽略的区域是矩形,您可以使用roi首先提取图像的相关区域,然后在剩余部分上调用GrabCut。这将导致原始ROI之外的像素不在颜色模型中使用,并且因为没有任何复制,所以将是一种有效的实现。