现在的位置: 首页 > 综合 > 正文

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

2013年10月11日 ⁄ 综合 ⁄ 共 886字 ⁄ 字号 评论关闭

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

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

#include <cv.h>
#include <highgui.h>

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

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;
}

 运行结果:

原图:

分割结果:

抱歉!评论已关闭.