簡體   English   中英

更改通過cvGrabCut()C#獲得的前景圖像的背景色

[英]Changing background color of foreground image obtained by cvGrabCut() c#

我在c#中使用cvGrabCut() cv中的cvGrabCut()方法提取前景圖像。 結果令人滿意,我可以提取黑色背景的前景圖像。 但是現在我必須將獲得的黑色背景圖像更改為某些不同的顏色。 我怎樣才能做到這一點? 我已使用以下代碼進行前景提取:

mask1.Draw(rect, new Gray(3), 0);
//the models (internally used)
Matrix<double> bgModel = new Matrix<double>(1, 13 * 5);
Matrix<double> fgModel = new Matrix<double>(1, 13 * 5);
//initialization with mask
CvInvoke.CvGrabCut(image.Ptr, mask1.Ptr, ref rect, bgModel.Ptr, fgModel.Ptr, 10, Emgu.CV.CvEnum.GRABCUT_INIT_TYPE.INIT_WITH_MASK);
//GrabCut segmentation
CvInvoke.CvGrabCut(image.Ptr, mask1.Ptr, ref rect, bgModel.Ptr, fgModel.Ptr, 15, Emgu.CV.CvEnum.GRABCUT_INIT_TYPE.EVAL);
//Get the pixels marked as likely foreground
mask1 = mask1.And(new Gray(1));
Image<Bgr, Byte> result = image.Copy(mask1);
result.Save("foreground.jpg");

從文檔看來,您應該用“新Bgr(b,g,r)”更改“新Gray(n)”之一或全部,其中字符分別是藍色,綠色和紅色(如反向RGB) )。

在這里查看文檔

從抓取得到結果后,您可以遍歷圖像並檢查3通道(RGB)中的黑色像素。 只需為檢測到的黑色像素替換相應的顏色值即可。 樣品:

行,cols = output.shape [:2]

b,g,r = cv2.split(output)
    for i in range(rows):
        for j in range(cols):
            if(r[i, j] == 0 and g[i, j] == 0 and b[i, j] == 0):
                r[i, j] = 255
                g[i, j] = 255
                b[i, j] = 255

在這里,我從黑色變成白色。 但是這段代碼在python中。 您可以在c#中執行類似的操作。

暫無
暫無

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

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