簡體   English   中英

openCV抓取GC_INIT_WITH_MASK第一次迭代

[英]openCV grabcut GC_INIT_WITH_MASK first iteration

他,我該如何用遮罩初始化第一個Grabcut? 就我而言,每次遇到此錯誤時:(-215)initGMMs中的!bgdSamples.empty()&&!fgdSamples.empty()。 是否可以使用mask運行第一次Grabcut迭代? 當我在Rect中使用第一個Grabcut迭代時,它已經可以工作了。 這是我用mask進行初始化的代碼(第二個迭代):

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

fyi當將模式設置為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初始化
  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. 第二個戴着面具的Grabcut初始化

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM