2012-11-06 23 views
0

我有以下程序在前景对象上绘制边界框。 这个边界框将通过测量矩形一边的长度来帮助按长度分类对象。用于分类的前景对象上的边界矩形

现在,这只能在一个对象上绘制一个矩形实例,我想让它同时绘制它们。但我卡住了。需要指导或协助。请看附图。 Foreground Mask![Original Image with Bounding Box drawn

Rect boundingRect(InputArray contours); 
    // Finds the contour with the largest area 
    int area = 200; 
    int idx = 0; 
    for(int i=0; i<contours.size() ;i++) 
    { 
     if(area < contours[i].size()) 
      idx = i; 
    } 

    //cout<< contours.size(); 
    // Calculates the bounding rect of the largest area contour 
    Rect rect = boundingRect(contours[idx]); 
    Point pt1, pt2; 
    pt1.x = rect.x; 
    pt1.y = rect.y; 
    pt2.x = rect.x + rect.width; 
    pt2.y = rect.y + rect.height; 
    cout<< idx<< "\t \t"; 
    // Draws the rect in the original image and show it 
    rectangle(frame_Original, pt1, pt2, CV_RGB(0,0,255), 2); 
    //cout << pt1; cout << pt2; 
+0

你的意思是你想绘制图像中所有汽车的边界框? –

+0

如果你有所有的斑点,我认为它会绘制所有的斑点。也许你已经以条件拒绝了其他人。 – Mzk

+1

试试这个:http://docs.opencv.org/doc/tutorials/imgproc/shapedescriptors/bounding_rects_circles/bounding_rects_circles.html#bounding-rects-circles –

回答

1

如果你想画的所有的矩形中countours的大小比area大,你应该保存的索引,然后使用一个循环来绘制所有的人。

vector<int> idx; 
for(int i=0; i < contours.size() ;i++) 
{ 
    if(area < contours[i].size()) 
     idx.push_back(i); 
} 
for((int i=0; i < idx.size() ;i++) 
    \\ Draw every contours[idx[i]] 
+0

我不知道如何使用push_back方法...上面通过@AbidRahmanK解释的方法工作得很好。该教程很容易遵循。 – Ruzzar

+0

push_back只需在矢量的末尾添加一个元素即可。 – luhb