MCPcopy Create free account
hub / github.com/creatale/node-dv / grabCut

Method grabCut

deps/opencv/modules/imgproc/src/grabcut.cpp:528–575  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

526}
527
528void cv::grabCut( InputArray _img, InputOutputArray _mask, Rect rect,
529 InputOutputArray _bgdModel, InputOutputArray _fgdModel,
530 int iterCount, int mode )
531{
532 Mat img = _img.getMat();
533 Mat& mask = _mask.getMatRef();
534 Mat& bgdModel = _bgdModel.getMatRef();
535 Mat& fgdModel = _fgdModel.getMatRef();
536
537 if( img.empty() )
538 CV_Error( CV_StsBadArg, "image is empty" );
539 if( img.type() != CV_8UC3 )
540 CV_Error( CV_StsBadArg, "image mush have CV_8UC3 type" );
541
542 GMM bgdGMM( bgdModel ), fgdGMM( fgdModel );
543 Mat compIdxs( img.size(), CV_32SC1 );
544
545 if( mode == GC_INIT_WITH_RECT || mode == GC_INIT_WITH_MASK )
546 {
547 if( mode == GC_INIT_WITH_RECT )
548 initMaskWithRect( mask, img.size(), rect );
549 else // flag == GC_INIT_WITH_MASK
550 checkMask( img, mask );
551 initGMMs( img, mask, bgdGMM, fgdGMM );
552 }
553
554 if( iterCount <= 0)
555 return;
556
557 if( mode == GC_EVAL )
558 checkMask( img, mask );
559
560 const double gamma = 50;
561 const double lambda = 9*gamma;
562 const double beta = calcBeta( img );
563
564 Mat leftW, upleftW, upW, uprightW;
565 calcNWeights( img, leftW, upleftW, upW, uprightW, beta, gamma );
566
567 for( int i = 0; i < iterCount; i++ )
568 {
569 GCGraph<double> graph;
570 assignGMMsComponents( img, mask, bgdGMM, fgdGMM, compIdxs );
571 learnGMMs( img, mask, compIdxs, bgdGMM, fgdGMM );
572 constructGCGraph(img, mask, bgdGMM, fgdGMM, lambda, leftW, upleftW, upW, uprightW, graph );
573 estimateSegmentation( graph, mask );
574 }
575}

Callers

nothing calls this directly

Calls 13

initMaskWithRectFunction · 0.85
checkMaskFunction · 0.85
initGMMsFunction · 0.85
calcBetaFunction · 0.85
calcNWeightsFunction · 0.85
assignGMMsComponentsFunction · 0.85
learnGMMsFunction · 0.85
constructGCGraphFunction · 0.85
estimateSegmentationFunction · 0.85
getMatMethod · 0.45
emptyMethod · 0.45
typeMethod · 0.45

Tested by

no test coverage detected