相比分水岭算法,GrabCut算法不是基于数学形态学,虽然相比分水岭算法计算的复杂度更高,但是其产生的结果更加精确。
适用范围:从静态图像中提取前景物体。
缺点:运行计算速度较慢,无法对连续的视频文件进行处理
grabCut函数拥有七个参数,分别为
cv::grabCut(image, //输入图像
result, //分割结果(这应该是一个掩模版)
rectangle2, //自定义矩形(包含前景)
bkgModel, fgrModel, //函数中的模型
5, //迭代次数
cv::GC_INIT_WITH_RECT); //矩形进行初始化
这个函数中,result这个分割结果图像可以有四种数值:
cv::GC_BGD;//确定属于背景元素
cv::GC_FGD;//确定属于前景元素
cv::GC_PR_BGD;//可能属于背景元素
cv::GC_PR_FGD;//可能属于前景元素
现在,我们使用compare函数对result进行比较赋值:(compare函数的原型在这里不过多解释)
将result中符合cv::GC_PR_FGD的值赋值给result,得到只有可能前景的result
也就是说,在应用grabCut函数之后,result有四个可能的值,所以这个时候如果你在grabCut函数之后加一句imshow,会得到一幅全黑图像
这时应用compare,可以将符合GC_PR_FGD的元素提取出来,这时再应用imsho