C++ OpenCV图像分割之GrabCut分割

论坛 期权论坛 编程之家     
选择匿名的用户   2021-5-29 23:39   49   0

前言

在OpenCV中的图像分割中GrabCut分割算法,该算法可以方便的分割出前景图像,操作简单,而且分割的效果很好。在前我们刚用学了OpenCV中的鼠标回调函数,也是为了这章用GrabCut做基础。

实现视频效果

API介绍

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

参数说明:

img: 输入图像

result: 分段结果

mask图像的值只能为下面下面4个值(PR,probably表示可能的):
GC_BGD = 0, //背景
GC_FGD = 1, //前景
GC_PR_BGD = 2, //可能背景
GC_PR_FGD = 3 //可能前景

rect: 包含前景的矩形

bgdModel: 背景

fgdModel: 前景

iterCount: 迭代次数,必须大于0

mode:用于指示grabcut用什么函数进行操作

GC_INIT_WITH_RECT //用矩形框初始化

GC_INIT_WITH_MASK //用掩码图像初始化

GC_EVAL //执行分割


代码演示

我们用的是上节课的鼠标回调事件的项目opencv--Grabcut

定义了用GrabCut所用到的基本参数及方法

初始化mask,设置为背景

然后设置接N键来进行GrabCut的图像分割

鼠标按下事件里加入两个参数的初始化

鼠标松开事件里对Mask进行重新定义

初始化Mask的方法setROIMask

执行GrabCut方法

显示图像方法修改


接下来我们看一下运行效果

源图

鼠标选中后的区域

通过GrabCut方法分割后的效果


-END-

长按下方二维码关注微卡智享

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP