Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

Draw Rectangle from Webcam with 2 largest object

I need to draw rectangle with 2 largest object from webcam. I already got to draw contours with 2 largest object from webcam but now i confuse in how to draw 2 largest Rectangle. Someone can show me the code Please~

//find and draw contours

void showconvex(Mat &thresh,Mat &frame) {

int largestIndex = 0;
int largestContour = 0;
int secondLargestIndex = 0;
int secondLargestContour = 0;

vector<vector<Point> > contours;
vector<Vec4i> hierarchy;

//find contours
findContours(thresh, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE);

/// Find the convex hull object for each contour
vector<vector<Point> >hull(contours.size());
vector<vector<int> >inthull(contours.size());
vector<vector<Vec4i> >defects(contours.size());

for (int i = 0; i < contours.size(); i++)
{
    convexHull(Mat(contours[i]), hull[i], false);
    convexHull(Mat(contours[i]),inthull[i], false);
    if (inthull[i].size()>3)
    convexityDefects(contours[i], inthull[i], defects[i]);
}

//find 2 largest contour
for( int i = 0; i< contours.size(); i++ )
{
    if(contours[i].size() > largestContour)
    {
        secondLargestContour = largestContour;
        secondLargestIndex = largestIndex;
        largestContour = contours[i].size();
        largestIndex = i;
    }
    else if(contours[i].size() > secondLargestContour)
    {
        secondLargestContour = contours[i].size();
        secondLargestIndex = i;
    }
}
    //show contours of 2 biggest and hull as well
if(contours.size()>0)
    {
        //check for contouraea function if error occur
        //draw the 2 largest contour using previously stored index.
        drawContours(frame, contours, largestIndex, CV_RGB(0,255,0), 2, 8, hierarchy);
        drawContours(frame, contours, secondLargestIndex, CV_RGB(0,255,0), 2, 8, hierarchy);
    }

}

Draw Rectangle from Webcam with 2 largest object

I need to draw rectangle with 2 largest object from webcam. I already got to draw contours with 2 largest object from webcam but now i confuse in how to draw 2 largest Rectangle. Someone can show me the code Please~

//find and draw contours

contours void showconvex(Mat &thresh,Mat &frame) {

{

    int largestIndex = 0;
 int largestContour = 0;
 int secondLargestIndex = 0;
 int secondLargestContour = 0;

 vector<vector<Point> > contours;
 vector<Vec4i> hierarchy;

 //find contours
 findContours(thresh, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE);

 /// Find the convex hull object for each contour
 vector<vector<Point> >hull(contours.size());
 vector<vector<int> >inthull(contours.size());
 vector<vector<Vec4i> >defects(contours.size());

 for (int i = 0; i < contours.size(); i++)
 {
     convexHull(Mat(contours[i]), hull[i], false);
     convexHull(Mat(contours[i]),inthull[i], false);
     if (inthull[i].size()>3)
     convexityDefects(contours[i], inthull[i], defects[i]);
 }

 //find 2 largest contour
 for( int i = 0; i< contours.size(); i++ )
 {
     if(contours[i].size() > largestContour)
     {
         secondLargestContour = largestContour;
         secondLargestIndex = largestIndex;
         largestContour = contours[i].size();
         largestIndex = i;
     }
     else if(contours[i].size() > secondLargestContour)
     {
         secondLargestContour = contours[i].size();
         secondLargestIndex = i;
     }
 }
     //show contours of 2 biggest and hull as well
 if(contours.size()>0)
     {
         //check for contouraea function if error occur
         //draw the 2 largest contour using previously stored index.
         drawContours(frame, contours, largestIndex, CV_RGB(0,255,0), 2, 8, hierarchy);
         drawContours(frame, contours, secondLargestIndex, CV_RGB(0,255,0), 2, 8, hierarchy);
        }
}

}