找到梯形的4个包裹点(矩形)

时间:2016-07-12 14:03:42

标签: opencv

我需要找到梯形的4分。我尝试使用“ret”但只有2分,似乎只有1分是好的。

find biggest rectangle result

int main(int argc, char** argv)
{
    Mat src = imread("IMG_20160708_1338252.jpg");
    imshow("source", src);
    int largest_area = 0;
    int largest_contour_index = 0;
    Rect bounding_rect;
    Mat thr;
    cvtColor(src, thr, COLOR_BGR2GRAY); //Convert to gray
    threshold(thr, thr, 125, 255, THRESH_BINARY); //Threshold the gray

    vector<vector<Point> > contours; // Vector for storing contours

    findContours(thr, contours, RETR_CCOMP, CHAIN_APPROX_SIMPLE); // Find the contours in the image

    for (size_t i = 0; i < contours.size(); i++) // iterate through each contour.
    {
        double area = contourArea(contours[i]);  //  Find the area of contour
        //src면적이랑 area가 같으면 제외 
        //if (src.size().area != area) {
            if (area > largest_area)
            {
                largest_area = area;
                largest_contour_index = i;               //Store the index of largest contour
                bounding_rect = boundingRect(contours[i]); // Find the bounding rectangle for biggest contour
            }
        //}
    }

    printf("top%d,%d\n", bounding_rect.tl().x, bounding_rect.tl().y);
    printf("bottom%d,%d\n\n", bounding_rect.br().x, bounding_rect.br().y);
    printf("top%d,%d\n", bounding_rect.x, bounding_rect.y);
    printf("%d,%d\n", bounding_rect.x, bounding_rect.y+ bounding_rect.height);
    printf("bottom%d,%d\n", bounding_rect.x + bounding_rect.width, bounding_rect.y);
    printf("%d,%d\n\n", bounding_rect.x+ bounding_rect.width, bounding_rect.y+ bounding_rect.height);

    //printf("bottom%d,%d\n", bounding_rect.br().x, bounding_rect.br().y);
    //contours[largest_contour_index];//가장큰 사각형
    //contours[largest_contour_index][0].x; contours[largest_contour_index][0].y;
    printf("1-%d,", contours[largest_contour_index]);
    printf("1-%d\n", contours[largest_contour_index][0].y);
    printf("2-%d,", contours[largest_contour_index][1].x);
    printf("2-%d\n", contours[largest_contour_index][1].y);
    printf("3-%d,", contours[largest_contour_index][2].x);
    printf("3-%d\n", contours[largest_contour_index][2].y);
    printf("4-%d,", contours[largest_contour_index][3].x);
    printf("4-%d\n", contours[largest_contour_index][3].y);

    //printf("1%d,", contours[0][largest_contour_index].x);

    drawContours(src, contours, largest_contour_index, Scalar(0, 255, 0), 2); // Draw the largest contour using previously stored index.

    imshow("result", src);
    waitKey();
    return 0;
}

如何找到最大的矩形?

0 个答案:

没有答案