影像分割:cv::grabCut
OpenCV提供另一個grabCut影像分割演算法,計算方式較watershed更複雜,
但結果比較精確,如果想要從靜態影像提取前景物體,像是將一幅影像中的物體剪貼到另一幅圖中,
這是最佳算法。
void grabCut(InputArray img, InputOutputArray mask, Rect rect, InputOutputArray bgdModel, InputOutputArray fgdModel, int iterCount, int mode=GC_EVAL)
#img: 輸入圖,8位元3通道。
#mask: 輸出圖,8位元單通道圖。
# 輸出圖mask每個像素為以下四個標誌之一:
# 1. GC_BGD: 確定為後景
# 2. GC_FGD: 確定為前景
# 3. GC_PR_BGD: 可能為後景
# 4. GC_PR_FGD: 可能為前景
#rect: 輸入矩形,在這之外的像素全都是背景,只有mode參數是GC_INIT_WITH_RECT時才有效。
#bgdmodel: 背景模型,供演算法內部使用。(提供演算法後景資訊)
#fgdmodel: 前景模型,供演算法內部使用。(提供演算法前景資訊)
#interCount: 迭代次數。
#mode: 處理模式。
# 模式有三種選擇:
# 1. GC_INIT_WITH_RECT: 提供矩形範圍的初始條件
# 2. GC_INIT_WITH_MASK: 提供遮罩,可和GC_INIT_WITH_RECT共同使用,在這ROI之外的為背景
# 3. GC_EVAL: 預設模式
原理閱讀:
(三個Channel綜合考慮,建立前景與後景各自的GMM模型,迭代對每個像素進行前景後景分類運算。)
留言
張貼留言