2015-05-18 510 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參數,它應該產生一個四邊形,四邊形的四角形多邊形。 –

+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條多段線,很可能是錯誤的。