当前位置:   article > 正文

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

opencv c++图像分割 graphcut算法

前言

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-

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

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号