gpt4 book ai didi

c++ - openCV grabcut GC_INIT_WITH_MASK 第一次迭代

转载 作者:太空宇宙 更新时间:2023-11-04 13:45:49 29 4
gpt4 key购买 nike

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

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 )

谢谢

最佳答案

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

  1. 首先使用 rect 进行 Grabcut 初始化
  2. 使用 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);
  3. 第二个带 mask 的 Grabcut init

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

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com