grabcut演算法的實現步驟為:
在中定義含有(乙個或多個)物體的矩形。
矩形外的區域被自動認為是背景。
對於使用者定義的矩形區域,可用背景中的資料來區別它裡面的前景和背景區域。
用高斯混合模型(gaussians mixture model,gmm)來對背景和前景建模,並將未定義的畫素標記為可能的前景或背景。
影象中的每乙個畫素都被看作通過虛擬邊與周圍畫素相連線,而每條邊都有乙個屬於前景或背景的概率,這基於它與周圍畫素顏色上的相似性。
每乙個畫素(即演算法中的節點)會與乙個前景或背景節點連線。
在節點完成連線後(可能與背景或前景連線),若節點之間的邊屬於不同終端(即乙個節點屬於前景,乙個節點屬於背景),則會切斷它們之間的邊,這就能將影象各部分分隔出來。
下面的示例**主要有這幾步:
載入想要處理的影象,然後建立乙個與影象大小相同的掩模,並用0填充。
建立以0填充的前景和背景模型。
準備乙個標識出想要隔離的物件的矩形來初始化grabcut演算法。
使用指定的空模型和掩模來執行grabcut演算法。
cv2.grabcut()的第六個引數是演算法迭代的次數,執行完演算法之後,掩模已經變成了包含0~3的值,其中值為0和2的為背景,值為1和3的為前景。
使用matplotlib來併排展示處理前後的影象。
示例**如下:
原影象statue_small.jpg為:
執行結果為:
opencv使用GrabCut演算法提取前景物體
void grabcut inputarray image,inputoutputarray mask,rect rect,inputoutputarray bgdmodel,inputoutputarray fgdmodel,int itercount,int mode 引數說明 輸入 輸出的8位...
opencv使用GrabCut演算法提取前景物體
void grabcut inputarray image,inputoutputarray mask,rect rect,inputoutputarray bgdmodel,inputoutputarray fgdmodel,int itercount,int mode 引數說明 輸入 輸出的8位...
OpenCV學習 20 grabcut分割演算法
在opencv中,實現了grabcut分割演算法,該演算法可以方便的分割出前景影象,操作簡單,而且分割的效果很好。演算法的原理參見papaer grabcut interactive foreground extraction using iterated graph cuts 比如下面的一副圖,我...