Найти и нарисовать самый большой прямоугольник OpenCV

Мне нужно найти самый большой контур / прямоугольник на этом изображении, который должен быть картой.
Описание изображения

Я пытаюсь использовать следующий код, но я не получаю рисунок:

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

Может ли кто-нибудь предоставить мне пример, использующий это изображение, чтобы найти самый большой прямоугольник?

2

Решение

  1. Вы можете попробовать себя, увеличив порог.

  2. Здесь вы найдете самый большой контур на пороговом изображении, поэтому отображайте thr сразу после threshold() с помощью imshow() и посмотрим, что происходит и как это выглядит.

Посмотрите на результат, увеличив порог до чуть более высокого значения.

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

Пороговое изображение

введите описание изображения здесь

Ограничивающий прямоугольник для самого большого контура

введите описание изображения здесь

2

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector