影像分割(grabCut)

OpenCV提供另一個grabCut影像分割演算法,計算方式較watershed更複雜,但結果比較精確,如果想要從靜態影像提取前景物體,像是將一幅影像中的物體剪貼到另一幅圖中,這是最佳算法。


提取前景

void grabCut(InputArray img, InputOutputArray mask, Rect rect, InputOutputArray bgdModel, InputOutputArray fgdModel, intiterCount, int mode=GC_EVAL)

  • img:輸入圖,8位元3通道。
  • mask :輸出圖,8位元單通道圖。
  • rect :輸入矩形,在這之外的像素全都是背景,只有mode參數是GC_INIT_WITH_RECT時才有效。
  • bgdModel:背景模型,供演算法內部使用,基本上可以忽略。
  • fgdModel:前景模型,供演算法內部使用,基本上可以忽略。
  • intiterCount:迭代次數。
  • mode:處理模式。

輸出圖mask每個像素為以下四個標誌之一:

  1. GC_BGD:確定是背景。
  2. GC_ FGD :確定是前景。
  3. GC_PR_BGD:可能是背景。
  4. GC_PR_ FGD :可能是前景。

mode:有以下三種可選擇:

  1. GC_INIT_WITH_RECT:提供矩形範圍的初始條件。
  2. GC_INIT_WITH_MASK:提供遮罩,可和GC_INIT_WITH_RECT共同使用,在這ROI之外的為背景。
  3. GC_EVAL:預設模式。

GrabCut對影像進行切割,來獲得最佳配置,不斷迭代優化結果,根據場景的複雜度,得到滿意結果的迭代次數可多可少。