grabcut圖像分割(2)

  grabcut分割算法簡單且效果較好,初步決定將其應用到項目中,爲了省去其人機交互的部分考慮到圖像的顯著性,查看的基本方法大多涉及機器學習。由於我們的項目待處理圖像較爲規整,於是想到每幅圖片均提取相同的矩形區域,爲grabcut算法提供先驗像素。具體代碼如下:

#include"highgui.h"  
#include"cv.h"  
using namespace cv;  
  
Rect selection;  
Mat img,img0; 
int main()
{  
Mat srcMarks;
    img = imread("1.jpg");          
    imshow("原圖", img);  

img0 = img.clone(); 

//繪製合適大小的矩形區域:

selection = cv::Rect(20,150,850,300);
img.copyTo(srcMarks);
cv::rectangle(srcMarks, selection, cv::Scalar(255, 0, 0),1,1,0);
imshow("srcMarks",srcMarks);
waitKey(100);
  Mat result; // 4種可能結果  
    Mat bgModel, fgModel; // 背景/前景 
grabCut(srcMarks, result, selection, bgModel, fgModel, 5, GC_INIT_WITH_RECT);  
            compare(result,GC_PR_FGD,result,CMP_EQ);//得到前景mask  
            Mat foreground(img.size(),CV_8UC3,Scalar::all(255));  
            img0.copyTo(foreground,result);  
            imshow("grabcut",foreground);

     waitKey();      

}  



初步實現了我們的想法,仍存在的問題:

1、圖片素材大小不一,需預先將所有圖像大小標準化。

2、速度較慢。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章