2016-04-13 125 views
3

我試圖實現這個code,但是當我想要確定輪廓的最極端點時,請按照本教程進行操作。使用OpenCV C++查找輪廓線上的極端點

# determine the most extreme points along the contour 
    extLeft = tuple(c[c[:, :, 0].argmin()][0]) 
    extRight = tuple(c[c[:, :, 0].argmax()][0]) 
    extTop = tuple(c[c[:, :, 1].argmin()][0]) 
    extBot = tuple(c[c[:, :, 1].argmax()][0]) 

任何人都可以幫助我解決這個問題嗎?

+0

看看http://answers.opencv.org/question/64433 – sturkmen

回答

3

std::vector<cv::Point>開始,您可以使用std::max_elementstd::min_element用適當的比較,即適用於x座標找到點,並適用於y座標找到頂部底部要點:

// Your points 
vector<Point> pts; 
... 


Point extLeft = *min_element(pts.begin(), pts.end(), 
         [](const Point& lhs, const Point& rhs) { 
          return lhs.x < rhs.x; 
        }); 
Point extRight = *max_element(pts.begin(), pts.end(), 
         [](const Point& lhs, const Point& rhs) { 
          return lhs.x < rhs.x; 
        }); 
Point extTop = *min_element(pts.begin(), pts.end(), 
         [](const Point& lhs, const Point& rhs) { 
          return lhs.y < rhs.y; 
        }); 
Point extBot = *max_element(pts.begin(), pts.end(), 
         [](const Point& lhs, const Point& rhs) { 
          return lhs.y < rhs.y; 
        }); 
+0

爲extRight和extBot的代碼需要有比較反轉(lhs.x> rhs.x用於extRight,lhs.y> rhs.y用於extBot) – bantic

+0

@bantic你是對的......實際上這個代碼很糟糕;)我會用minmax_element asap重寫它 – Miki