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);
 }
}

}