2014-02-05 42 views
0

我嘗試在以下文章中實現想法:BiCoS: A Bi-level Co-Segmentation Method for Image Classification但我對以下要求感到困惑:此處的GrabCut是用矩形初始化的在中心(圖像大小的50%,除非另有說明)分配給前景,其餘分配給背景。我不知道如何在中心繪製一個矩形,佔據圖像大小的50%。請幫幫我。我使用OpenCV庫在C++中編寫代碼。使用Grabcut初始化等於圖像大小的50%的矩形

回答

0

該文件應該更清楚。從上下文來看,它可能指的是一個定義包含分段對象的感興趣區域(ROI)的矩形。 ROI外部的像素被標記爲「明顯的背景」。正如你可能知道GrabCut要求你指定圖像的區域,指定明顯的背景像素,可能的前景像素,明顯的前景像素,可能的前景像素。所有這些數據將作爲參數提供給OpenCV中的grubCut function。另外,here's the documentation for cv::Rect

我不知道作者如何選擇矩形的大小。具有50%圖像大小的矩形大小是什麼意思?這可能是矩形的尺寸等於圖像尺寸的1/2。您可以通過電子郵件發送論文的作者並要求澄清。

1

那麼,它們被假定感興趣的數字是由像一個矩形限定:

Rect(Point(image.width/4, image.height/4), Point(image.width*3/4, image.height*3/4); 

或具有圖像(1 /根-2大小)的一半的面積矩形;再次以圖像中心點爲中心。

然後可以在該矩形內調用grabcut算法。

如果圖形在某種程度上接近邊界,那麼他們手動選擇矩形(監督啓動)。由於目的是通過抓取結果來訓練SVM,所以自動化不是必須的。

0

要選擇您可以使用Roi。但是,如果你想繪製框或矩形,那麼你可以使用矩形或線功能。 這裏是繪製矩形框50%大小的圖像的簡單代碼。

int main(int argc, char *argv[]) 
{ 
    Mat src = imread("Desert.jpg"); 
    Mat src_original = src.clone(); 

    cv::Size sz = src.size(); 
    int block_size = 16; 
    int x_cord_roi = sz.width/4; 
    int y_cord_roi = sz.height/4; 
    int width_roi = sz.width/2; 
    int height_roi = sz.height/2; 

    imshow("My_Win_Ori", src_original); 

    Mat roi(src, Rect(x_cord_roi, y_cord_roi, width_roi, height_roi)); 
    // rectangle(src, Point(x_cord_roi, y_cord_roi), Point(x_cord_roi + width_roi, y_cord_roi + height_roi), 
    //  Scalar(255), -1,8); 

    int thickness = 2; 
    int lineType = 8; 
    line(src, Point(x_cord_roi, y_cord_roi), Point(x_cord_roi + width_roi, y_cord_roi), Scalar(0, 0, 0), thickness, lineType); 
    line(src, Point(x_cord_roi, y_cord_roi), Point(x_cord_roi, y_cord_roi + height_roi), Scalar(0, 0, 0), thickness, lineType); 
    line(src, Point(x_cord_roi + width_roi, y_cord_roi), Point(x_cord_roi +width_roi , y_cord_roi + height_roi), Scalar(0, 0, 0), thickness, lineType); 
    line(src, Point(x_cord_roi, y_cord_roi + height_roi), Point(x_cord_roi + width_roi, y_cord_roi + height_roi), Scalar(0, 0, 0), thickness, lineType); 

    imshow("My_Win", src); 
    waitKey(0); 
    getchar(); 
    return 0; 

}