2015-05-18 4 views
2

У меня есть следующий код:Как найти координаты самого большого прямоугольника в OpenCV?

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

Я хочу, чтобы получить координаты четырех точек (отмечены зеленым), что возможное?

+2

Трудно сказать для компьютера, если контур представляет собой прямоугольник. Попробуйте ['cv :: approxPolyDP()'] (http://docs.opencv.org/modules/imgproc/doc/structural_analysis_and_shape_descriptors.html?highlight=approxpoly#approxpolydp) на вашем самом большом контуре с разумным параметром epsilon, он должен изготовить 4-сторонний 4-угловой полигон для приблизительно четырехугольных форм. –

+0

попробуйте функцию HoughLinesP – Micka

+0

Здесь [некоторые вещи] (http://stackoverflow.com/a/13532779/176769) здесь [готово для захватов] (http://stackoverflow.com/a/26242885/176769). – karlphillip

ответ

1

Вы пытаетесь найти углы прямоугольника в перспективе?

Вы можете попробовать несколько решений:

  1. Использование HoughLines для обнаружения линии и найти их пересечение.
  2. Generalized Hough Transform
  3. Использование Harris corner detector. Но вам нужно отфильтровать дополнительные углы.

Для подобной задачи я использовал следующие процедуры (она отлично работает в моем случае): сделать cv::approxPolyDP для входного контура с увеличением параметра эпсилон, пока он не возвращает 4 или менее полилинии. Если он возвращает 4 полилинии, вы можете получить 4 угловых точки, которые вам нужны. Если он возвращает менее 4 полилиний, скорее всего, что-то не так.

Смежные вопросы