2016-02-04 144 views
1

**〜更新〜** 您好,我有一個源文件,我把它轉換成下面的圖片,和我有一個輪廓在我的程序OpenCV:如何獲得每個輪廓的邊界框?

void find_contour(int, void*, Mat _mat) 
{ 
    Mat edge_detect_canny; 
    vector<vector<Point> > contours; 
    vector<Vec4i> hierarchy; 
    findContours(_mat, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0, 0)); 
    Mat drawing = Mat::zeros(_mat.size(), CV_8UC3); 
    for (int i = 0; i < contours.size(); i++) 
     { 
     Scalar color = Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255)); 
     drawContours(drawing, contours, i, color, 1, 8, hierarchy, 1, Point()); 
     } 
    IMshow(drawing, "draw-Res", 0); 
    imwrite("c:\\draw.bmp", drawing); 
    int cs = contours.size(); 
    cout << cs << "contour.size" << endl; 
} 

工作正常,但我想要添加邊界框,找到每個輪廓的邊界框來選擇所有的對象。 我該怎麼辦?

+0

@Miki嗨,很好的工作,我嘗試這個例子[鏈接](http://docs.opencv.org/2.4/doc/tutorials/imgproc/shapedescriptors/bounding_rect s_circles/bounding_rects_circles.html),但不工作我是opencv的初學者,我該怎麼辦?問候 。 –

+0

請將您試過的代碼發佈到問題中,以及輸入圖片 – Miki

+0

@Miki:我更新了帖子:) –

回答

3

你可以得到邊框每個輪廓:

Rect box = boundingRect(contours[i]); 

,你可以借鑑它:

rectangle(drawing, box, color); 

所以,簡單地在for循環添加以下兩行:

Rect box = boundingRect(contours[i]); 
rectangle(drawing, box, color);