grabCut算法的大致思路,摘抄。。。。
- 在图片中定义(一个或者多个)包含物体的矩形。
- 矩形外的区域被自动认为是背景。
- 对于用户定义的矩形区域,可用背景中的数据来区分它里面的前景和背景区域。
- 用高斯混合模型(GMM)来对背景和前景建模,并将未定义的像素标记为可能的前景或者背景。
- 图像中的每一个像素都被看做通过虚拟边与周围像素相连接,而每条边都有一个属于前景或者背景的概率,这是基于它与周边像素颜色上的相似性。
- 每一个像素(即算法中的节点)会与一个前景或背景节点连接。
- 在节点完成连接后(可能与背景或前景连接),若节点之间的边属于不同终端(即一个节点属于前景,另一个节点属于背景),则会切断他们之间的边,这就能将图像各部分分割出来
def grabCut(img, mask, rect, bgdModel, fgdModel, iterCount, mode=None)
输入参数:
img: 输入图像
mask: 掩码图像,用来确定哪些区域是背景、前景,哪些可能是前景/背景
0 GC_BGD 定义了明显的背景像素。
1 GC_FGD 定义了一个明显的前景(对象)像素。
2 GC_PR_BGD 定义了可能的背景像素。
3 GC_PR_FGD 定义了可能的前景像素。