天天看点

opencv学习笔记五十八:grabCut抠图

基本步骤:

  • 基于交互式界面由用户选择前景区域;
  • 定义一个单通道的输出掩码,0为背景,1为前景,2为可能的背景,3为可能的前景;
  • grabCut抠图;将输出结果与可能的前景作比较得到可能的前景;
  • 定义三通道的结果图像;
  • 从原图中拷贝可能的前景到结果图像;
grabCut( InputArray img, InputOutputArray mask, Rect rect,
                           InputOutputArray bgdModel, InputOutputArray fgdModel,
                           int iterCount, int mode = GC_EVAL );
           

 img:输入原图像;

mask:输出掩码;

rect:用户选择的前景矩形区域;

bgModel:输出背景图像;

fgModel:输出前景图像;

iterCount:迭代次数;

#include<opencv2\opencv.hpp>
using namespace cv;
void onMouse(int event, int x, int y, int flags, void* userdata);
Rect rect;
Mat src,roiImg, result;
void showImg();
int main(int arc, ch