Exemple #1
0
	void getGrabCutSeg(Mat& inIm, Mat& mask_fgnd, Rect ROI)
	{
		Mat mask_out;
		Rect rect = ROI;
		Mat fgnd, bgnd;
		grabCut(inIm, mask_out, rect, bgnd, fgnd, 5, GC_INIT_WITH_RECT);
		bitwise_and(mask_out, GC_FGD, mask_fgnd);
	}
void initModify::myGrabCut(Mat & backgroundImage, Mat & mask) {
	Rect aoi;
	aoi.x = 0;
	aoi.y = 0;
	aoi.width = mask.cols;
	aoi.height = mask.cols;
	Mat bgdModel, fgdModel;
	grabCut(backgroundImage, mask, aoi, bgdModel, fgdModel, 2, GC_INIT_WITH_MASK);
}
void GrabCutMF::runGrabCutOpenCV(CStr &wkDir)
{
	CStr imgDir = wkDir + "Imgs/", salDir = wkDir + "Sal/";
	vecS namesNE;
	int imgNum = CmFile::GetNamesNE(imgDir + "*.jpg", namesNE);
	CmFile::MkDir(salDir);

	// Number of labels
	CmTimer tm("Time");
	tm.Start();
	for (int i = 0; i < imgNum; i++){
		printf("Processing %d/%d: %s.jpg%20s\r\n", i, imgNum, _S(namesNE[i]), "");
		CmFile::Copy(imgDir + namesNE[i] + ".jpg", salDir + namesNE[i] + ".jpg");
		CmFile::Copy(imgDir + namesNE[i] + ".png", salDir + namesNE[i] + "_GT.png");
		Mat imMat3u = imread(imgDir + namesNE[i] + ".jpg");
		Mat gt1u = imread(imgDir + namesNE[i] + ".png", CV_LOAD_IMAGE_GRAYSCALE);
		//imwrite(imgDir + namesNE[i] + ".bmp", gt1u);
		blur(gt1u, gt1u, Size(3,3));
		Rect wkRect = CmCv::GetMaskRange(gt1u, 1, 128);

		// Prepare data for OneCut
		//Mat rectImg = Mat::ones(gt1u.size(), CV_8U)*255;
		//rectImg(wkRect) = 0;
		//imwrite(salDir + namesNE[i] + ".bmp", imMat3u);
		//imwrite(salDir + namesNE[i] + "_t.bmp", rectImg);

		Mat res1u, bgModel, fgModel;
		grabCut(imMat3u, res1u, wkRect, bgModel, fgModel, 1, GC_INIT_WITH_RECT);
		grabCut(imMat3u, res1u, wkRect, bgModel, fgModel, 5);
		compare(res1u, GC_PR_FGD, res1u, CMP_EQ);
		imwrite(salDir + namesNE[i] + "_GC.png", res1u);
	}
	tm.Stop();
	double avgTime = tm.TimeInSeconds()/imgNum;
	printf("Speed: %gs, %gfps\t\t\n", avgTime, 1/avgTime);

	CmEvaluation::EvalueMask(imgDir + "*.png", salDir, "GC", "");
}
	int GCApplication::nextIter()
	{
		if (isInitialized)
			grabCut(*image, mask, rect, bgdModel, fgdModel, 1);
		else
		{
			if (rectState != SET)
				return iterCount;

			if (lblsState == SET || prLblsState == SET)
				grabCut(*image, mask, rect, bgdModel, fgdModel, 1, GC_INIT_WITH_MASK);
			else
				grabCut(*image, mask, rect, bgdModel, fgdModel, 1, GC_INIT_WITH_RECT);

			isInitialized = true;
		}
		iterCount++;

		bgdPxls.clear(); fgdPxls.clear();
		prBgdPxls.clear(); prFgdPxls.clear();

		return iterCount;
	}
int GrabCutSegmentor::nextIter()
{
    if( isInitialized )
        grabCut( m_Img, m_Mask, rect, m_BgdModel, m_FgdModel, 1 );
    else
    {
        if( rectState != SET )
            return iterCount;

        if( lblsState == SET || prLblsState == SET )
            grabCut( m_Img, m_Mask, rect, m_BgdModel, m_FgdModel, 1, GC_INIT_WITH_MASK );
        else
            grabCut( m_Img, m_Mask, rect, m_BgdModel, m_FgdModel, 1 , GC_INIT_WITH_RECT );

        isInitialized = true;
    }
    iterCount++;

    bgdPxls.clear(); fgdPxls.clear();
    prBgdPxls.clear(); prFgdPxls.clear();

    return iterCount;
}
Exemple #6
0
int main()
{
	cv::Mat image = cv::imread("dog.jpg");
	
	// Define ROI(region of interest)
	cv::Rect fg_r(cv::Point(150, 0), cv::Point(720, 524));
	
	cv::Mat result;
	cv::Mat bgModel, fgModel;
	grabCut(image, result, fg_r, bgModel, fgModel, 5, cv::GC_INIT_WITH_RECT);

	// Get the pixels marked as likely foreground
	cv::compare(result, cv::GC_PR_FGD, result, cv::CMP_EQ);
	
	// Generate output image
	cv::Mat foreground(image.size(), CV_8UC3, cv::Scalar(255, 255, 255));
	
	image.copyTo(foreground, result); // bg pixels not copied
	imshow("Dog image", image);
	imshow("Foreground", foreground);
	
	cv::waitKey(0);   
	return 0;
}