opencv使用GrabCut演算法提取前景物體

2021-09-29 13:22:08 字數 1518 閱讀 8130

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);

本例的結果標記畫素包含可能屬於前景的畫素(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演算法提取前景物體

void grabcut inputarray image,inputoutputarray mask,rect rect,inputoutputarray bgdmodel,inputoutputarray fgdmodel,int itercount,int mode 引數說明 輸入 輸出的8位...

OpenCV 使用GrabCut演算法進行物體分割

grabcut演算法的實現步驟為 在中定義含有 乙個或多個 物體的矩形。矩形外的區域被自動認為是背景。對於使用者定義的矩形區域,可用背景中的資料來區別它裡面的前景和背景區域。用高斯混合模型 gaussians mixture model,gmm 來對背景和前景建模,並將未定義的畫素標記為可能的前景或...

OpenCV學習 20 grabcut分割演算法

在opencv中,實現了grabcut分割演算法,該演算法可以方便的分割出前景影象,操作簡單,而且分割的效果很好。演算法的原理參見papaer grabcut interactive foreground extraction using iterated graph cuts 比如下面的一副圖,我...