Мне нужно найти самый большой контур / прямоугольник на этом изображении, который должен быть картой.
Я пытаюсь использовать следующий код, но я не получаю рисунок:
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);
Может ли кто-нибудь предоставить мне пример, использующий это изображение, чтобы найти самый большой прямоугольник?
Вы можете попробовать себя, увеличив порог.
Здесь вы найдете самый большой контур на пороговом изображении, поэтому отображайте thr
сразу после threshold()
с помощью imshow()
и посмотрим, что происходит и как это выглядит.
Посмотрите на результат, увеличив порог до чуть более высокого значения.
threshold(thr, thr,100, 255,THRESH_BINARY); //Threshold the gray
Пороговое изображение
Ограничивающий прямоугольник для самого большого контура