如何在OpenCV中找到最大矩形的坐标?

时间:2015-05-18 18:29:41

标签: c++ opencv contour

我有以下代码:

    findContours( src, contours, hierarchy, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE );

    Mat drawing = Mat::zeros( src.size(), CV_8UC3 );

    double largest_area = 0;

    for( int i = 0; i < contours.size(); i++) {  // get the largest contour
        area = fabs( contourArea( contours[i] ) );
        if( area >= largest_area ){
            largest_area = area;
            largest_contours.clear(); 
            largest_contours.push_back( contours[i] );
        }
    }

    if( largest_area >= 3000 ){   // draw the largest contour if exceeded minimum largest area 
        drawContours( drawing, largest_contours, -1, Scalar(0,0,255), 2 );
    }

...产生以下输出图像:

enter image description here

我想获得四个点的坐标(标有绿色),这可能吗?

1 个答案:

答案 0 :(得分:1)

你是否试图在透视中找到矩形的角落?

您可能想尝试多种解决方案:

  1. 使用HoughLines进行线路检测并找到它们的交叉点。
  2. 使用Generalized Hough Transform
  3. 使用Harris corner detector。但是你需要过滤额外的角落。
  4. 对于类似的任务我使用了以下程序(在我的情况下它工作正常): 使用增加的epsilon参数对输入轮廓执行cv::approxPolyDP,直到它返回4条或更少的折线。如果它返回4条折线,你可以得到4个角点,完全符合你的要求。如果它返回少于4个折线,则可能出现问题。