查找并绘制最大的rect OpenCV

时间:2014-04-23 04:03:04

标签: c++ opencv edge-detection

我需要在这张图片上找到最大的轮廓/矩形,这应该是卡片。 image description

我尝试使用以下代码,但我没有绘图:

int largest_area=0;
int largest_contour_index=0;
cv::Rect bounding_rect;

Mat thr(src.rows,src.cols,CV_8UC1);
Mat dst(src.rows,src.cols,CV_8UC1,Scalar::all(0));
cvtColor(src,thr,CV_BGR2GRAY); //Convert to gray
threshold(thr, thr,25, 255,THRESH_BINARY); //Threshold the gray

vector<vector<cv::Point>> contours; // Vector for storing contour
vector<Vec4i> hierarchy;

findContours( thr, contours, hierarchy,CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE ); // Find the contours in the image

for( int i = 0; i< contours.size(); i++ ) // iterate through each contour.
{
    double a=contourArea( contours[i],false);  //  Find the area of contour
    if(a>largest_area){
        largest_area=a;
        largest_contour_index=i;                //Store the index of largest contour
        bounding_rect=boundingRect(contours[i]); // Find the bounding rectangle for biggest contour
    }

}

Scalar color( 255,255,255);
drawContours( dst, contours,largest_contour_index, color, CV_FILLED, 8, hierarchy ); // Draw the largest contour using previously stored index.
rectangle(src, bounding_rect,  Scalar(0,255,0),1, 8,0);

有人可以使用此图像为我提供一个示例来查找最大的矩形吗?

1 个答案:

答案 0 :(得分:2)

  1. 您可以通过提高阈值来尝试自己。

  2. 此处您正在阈值图像上找到最大轮廓,因此在使用thr threshold()之后显示imshow(),看看发生了什么,以及它看起来如何等。

  3. 通过将阈值增加到更高的值来查看结果。

    threshold(thr, thr,100, 255,THRESH_BINARY); //Threshold the gray
    

    阈值图片

    enter image description here

    最大轮廓的边界矩形

    enter image description here