图像分割之(五)OpenCV的GrabCut调用

在OpenCV的源码目录的samples的文件夹下,有grabCut的使用例程,请参考:
opencv\samples\cpp\grabcut.cpp。


在这里给出最简单的调用grabcut

#include 
#include 

#pragma comment(lib,"cv210d.lib")
#pragma comment(lib,"cxcore210d.lib")
#pragma comment(lib,"highgui210d.lib")
#include 

using namespace std;
using namespace cv;


void MyShowImage(Mat Image,const string winName)
{
	imshow( winName, Image );
}
void getBinMask( const Mat& comMask, Mat& binMask )
{
    binMask.create( comMask.size(), CV_8UC1 );
    binMask = comMask & 1;
}
int main( int argc, char** argv )
{
    Mat image = imread( "lena.jpg", 1 );
	const string winName = "image";
	MyShowImage(image,winName);

	/***********************************/
	Mat bg;Mat fg;
	Rect rect = Rect(47,48,408,464);
	Mat mask,res;
	mask.create( image.size(), CV_8UC1);
    grabCut( image, mask, rect, bg, fg, 1, 0 );

	Mat binMask;
	getBinMask( mask, binMask );
    image.copyTo( res, binMask );
	MyShowImage(res,winName);
	/***********************************/
	cvWaitKey(0);
    return 0;
}


 运行结果:

原图:图像分割之(五)OpenCV的GrabCut调用_第1张图片

分割结果:图像分割之(五)OpenCV的GrabCut调用_第2张图片

你可能感兴趣的:(图像应用)