OpenCV中的GrabCut算法是Graphcut算法的改进, Grabcut是一种直接基于图割算法的图像分割技术, 仅仅需要确认前景和背景输入, 该算法就可以完成前景和背景的最优分割, 算法依据《“GrabCut” - Interactive Foreground Extraction using Iterated Graph Cuts》这篇文章来实现的。该算法利用了图像中的纹理(颜色)信息和边界(反差)信息, 只要少量的用户交互操作即可得到比较好的分割结果, 和分水岭算法比较相似, 但是计算速度比较慢, 得到的结果比较精确。如果要从静态图像中提取前景物体(如从一个图像剪切物体到另一个图像), 采用GrabCut算法是最好的选择。
用法很简单: 只需输入一幅图像, 并对一些像素做属于背景或属于前景的标记, 算法会根据这个局部标记, 计算出整个图像中前景和背景的分割线。
如下:
CV_EXPORTS_Wvoid grabCut(InputArray img,
InputOutputArray mask,
Rect rect,