他,
我如何用蒙版初始化第一个Grabcut?就我而言,每次出现此错误时:(-215)initGMMs中的!bgdSamples.empty()&&!fgdSamples.empty()。
是否可以使用mask运行第一次Grabcut迭代?当我在Rect中使用第一个Grabcut迭代时,它已经可以工作了。这是我的带有掩码的初始化代码(第二个迭代):

mask = Mat::ones(image_.size(), CV_8UC1) * GC_PR_BGD; //GC_PR_BGD
// GrabCut segmentation
    grabCut(GrabCut::image,    // input image
            GrabCut::mask,   // segmentation result
            Rect(),// rectangle containing foreground
            GrabCut::bgModel,GrabCut::fgModel, // models
            iteration,       // number of iterations
            GC_INIT_WITH_MASK ); // use mask


当模式设置为GC_INIT_WITH_RECT时,该掩码由函数初始化。
遮罩有4个“层”:
GC_BGD defines an obvious background pixels.
GC_FGD defines an obvious foreground (object) pixel.
GC_PR_BGD defines a possible background pixel.
GC_PR_FGD defines a possible foreground pixel.

(http://docs.opencv.org/modules/imgproc/doc/miscellaneous_transformations.html?highlight=grabcut#cv2.grabCut)

谢谢

最佳答案

它不是完美的,但结果是干净的,并且图像边缘没有矩形。

  • 首先使用rect
  • 进行Grabcut初始化
  • 使用GC_PR_FGD / BGD作为颜色在图像周围绘制一个更大的矩形
    int xyCord = 1;
    int size = 2*xyCord;
        rectangle(GrabCut::mask, Point(xyCord,xyCord),Point(GrabCut::image.cols-size,GrabCut::image.rows-size),Scalar(GC_PR_FGD),30);
        rectangle(GrabCut::mask, Point(xyCord,xyCord), Point(GrabCut::image.cols-size,GrabCut::image.rows-size),Scalar(GC_PR_BGD),30);
    
  • 带有掩码
  • 的第二个Grabcut初始化

    关于c++ - openCV抓取GC_INIT_WITH_MASK第一次迭代,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26041887/

    10-11 21:25