void grabcut(inputarray image, inputoutputarray mask, rect rect, inputoutputarray bgdmodel, inputoutputarray fgdmodel, int itercount, int mode)
**********引數說明****************
輸入\輸出的8位單通道mask。當mode設為gc_init_with_rect時,由函式初始化, 當mode設為gc_init_with_mask,允許使用者輸入自己標記的掩碼。
mask的取值為以下四種:
簡單的例子:
#include"highgui.h"
#include"cv.h"
using namespace cv;
rect selection;
mat img,img0;
point prept(-1,-1);
void onmouse(int event,int x,int y,int flags,void* param)
else if (event == cv_event_mousemove && (flags && cv_event_flag_lbutton))
else if (event == cv_event_lbuttonup || !(flags & cv_event_flag_lbutton))
imshow("原圖", img);
筆記:
compare(result,gc_pr_fgd,result,cmp_eq);
本例的結果標記畫素包含可能屬於前景的畫素(gc_pr_fgd)和可能屬於背景的畫素(gc_pr_bgd),矩形之外的為確定屬於背景的畫素(gc_bgd),不包含gc_fgd。
通過result與可能屬於前景的畫素作比較,得到前景mask即可提取前景。
另一種方法是 result&=1;替代上句。
四種可能的結果值分別為0,1,2,3.即00000000,00000001,00000010,00000011.因為結果不包含1,所以核對第一位即可。
本例只是大致提取了前景,通過輸入帶標記的mask可提高準確度。
OpenCV 使用GrabCut演算法進行物體分割
grabcut演算法的實現步驟為 在中定義含有 乙個或多個 物體的矩形。矩形外的區域被自動認為是背景。對於使用者定義的矩形區域,可用背景中的資料來區別它裡面的前景和背景區域。用高斯混合模型 gaussians mixture model,gmm 來對背景和前景建模,並將未定義的畫素標記為可能的前景或...
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 比如下面的一副圖,我...