前景提取去除背景(selectROI+Grabcut)
Posted 朱铭德
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了前景提取去除背景(selectROI+Grabcut)相关的知识,希望对你有一定的参考价值。
前几天看到别人数学建模题目是前景提取,想到很早之前试过的grabcut,所以来放个demo,2333
惯例先放效果 //必须是三通道图片
两个函数:
1.selectROI 【需要配置Opencv的contribute模块】、、主要作用是获取矩形框,可自行写其他
第一个参数为输入图片,第二个参数为是否从中心开始选取矩形
2.grabCut函数 //输入必须是三通道的彩色图
详细用法如下:
/*
参考:
http://blog.csdn.net/zouxy09/article/details/8535087
****参数说明:
image——待分割的源图像,必须是8位3通道(CV_8UC3)图像,在处理的过程中不会被修改;
mask——掩码图像,如果使用掩码进行初始化,那么mask保存初始化掩码信息;在执行分割的时候,也可以将用户交互所设定的前景与背景保存到mask中,然后再传入grabCut函数;在处理结束之后,mask中会保存结果。mask只能取以下四种值:
GCD_BGD(=0),背景;
GCD_FGD(=1),前景;
GCD_PR_BGD(=2),可能的背景;
GCD_PR_FGD(=3),可能的前景。
如果没有手工标记GCD_BGD或者GCD_FGD,那么结果只会有GCD_PR_BGD或GCD_PR_FGD;
rect——用于限定需要进行分割的图像范围,只有该矩形窗口内的图像部分才被处理;
bgdModel——背景模型,如果为null,函数内部会自动创建一个bgdModel;bgdModel必须是单通道浮点型(CV_32FC1)图像,且行数只能为1,列数只能为13x5;
fgdModel——前景模型,如果为null,函数内部会自动创建一个fgdModel;fgdModel必须是单通道浮点型(CV_32FC1)图像,且行数只能为1,列数只能为13x5;
iterCount——迭代次数,必须大于0;
mode——用于指示grabCut函数进行什么操作,可选的值有:
GC_INIT_WITH_RECT(=0),用矩形窗初始化GrabCut;
GC_INIT_WITH_MASK(=1),用掩码图像初始化GrabCut;
GC_EVAL(=2),执行分割。
*/
下面就是简单粗暴的代码了,233
//Interactive Foreground Extraction using Iterated Graph Cuts
#include <opencv2/opencv.hpp>
#include <opencv2/tracking.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main()
Mat image = imread("test.jpg");
Mat mask;
//框选前景所在区域
bool fromCenter = false;
Rect2d r = selectROI(image,fromCenter);
Mat bgModel, fgModel; // 模型(内部使用)
grabCut(image,mask, r, bgModel, fgModel, 1, cv::GC_INIT_WITH_RECT);
// 得到可能为前景的像素
compare(mask, cv::GC_PR_FGD, mask, cv::CMP_EQ);
imshow("mask", mask);
// 生成输出图像
Mat foreground(image.size(), CV_8UC3, cv::Scalar(255, 255, 255));
image.copyTo(foreground, mask); // 复制背景数据
// 输出前景图像结果
cv::imshow("提取后", foreground);
cvWaitKey(0); //等待退出
return 0;
//口腔溃疡好严重,我去多吃点草了……
以上是关于前景提取去除背景(selectROI+Grabcut)的主要内容,如果未能解决你的问题,请参考以下文章
详解OpenCV的视频背景/前景分割(背景建模/前景提取)类cv::BackgroundSubtractorMOG2,并利用它实现对道路监控视频前景/背景的提取
详解OpenCV的视频背景/前景分割(背景建模/前景提取)类cv::BackgroundSubtractorKNN,并利用它实现对道路监控视频前景/背景的提取
详解OpenCV的视频背景/前景分割(背景建模/前景提取)类cv::bgsegm::BackgroundSubtractorGMG,并利用它实现对道路监控视频前景的提取
OpenCV4中有哪些视频背景/前景分割(背景建模/前景提取)算法的类,它们各自的算法原理和特点是什么。
详解OpenCV的视频背景/前景分割(背景建模/前景提取)类cv::bgsegm::BackgroundSubtractorMOG