![](/img/trans.png)
[英]What exactly happens after run Algorithm PCA (Principal Component Analysis)
[英]What happens in GrabCut Algorithm
我想知道以下代碼中實際上發生了什么。
cv::Rect rectangle(x,y,width,height);
cv::Mat result;
cv::Mat bgModel,fgModel;
cv::grabCut(image,
result,
rectangle,
bgModel,fgModel,
1,
cv::GC_INIT_WITH_RECT);
cv::compare(result,cv::GC_PR_FGD,result,cv::CMP_EQ);
// Generate output image
cv::Mat foreground(image.size(),CV_8UC3,cv::Scalar(255,255,255));
image.copyTo(foreground,result);
據我所知,當我們在矩形外部定義矩形時,會將其視為已知背景,將內部視為未知前景。
然后bgmodel
和fgmodel
是高斯混合模型,分別保留前景像素和背景像素。
我們將參數傳遞為1表示,我們要求將像素划分為單獨的像素,進程僅運行一次。
我不明白的是
cv::compare(result,cv::GC_PR_FGD,result,cv::CMP_EQ);
以上方法實際上發生了什么。
如果有人可以解釋,那將是很大的幫助。 感謝名單。
我發現這本書告訴我們該代碼將result
的像素值與GC_PR_FGD
值進行比較。 等於的像素不會觸摸,它刪除的所有其他像素。 這里是引文:
輸入/輸出分割圖像可以具有四個值之一:
- cv :: GC_BGD,用於肯定屬於背景的像素(例如,在我們的示例中,矩形外部的像素)
- cv :: GC_FGD,用於肯定屬於前景的像素(在我們的示例中沒有)
- cv :: GC_PR_BGD,用於可能屬於背景的像素
- cv :: GC_PR_FGD用於可能屬於前景的像素(在我們的示例中為矩形內像素的初始值)。
通過提取值等於cv :: GC_PR_FGD的像素,我們得到了分割的二進制圖像:
// Get the pixels marked as likely foreground cv::compare(result,cv::GC_PR_FGD,result,cv::CMP_EQ); // Generate output image cv::Mat foreground(image.size(),CV_8UC3, cv::Scalar(255,255,255)); image.copyTo(foreground, // bg pixels are not copied result);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.