前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C++ OpenCV图像分割之GrabCut分割

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

作者头像
Vaccae
发布2019-07-24 13:18:26
2K0
发布2019-07-24 13:18:26
举报
文章被收录于专栏:微卡智享微卡智享

前言

在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-

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-01-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 微卡智享 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档