2016-04-13 21 views
3

Bu code'u uygulamayı denedim, ancak konturun en uç noktasını belirlemek istediğimde sorun yaşıyorum bu eğiticiyi izleyin.OpenCV C++ ile konturlarda aşırı noktalar bulma

# 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]) 

Bu sorunu çözmeme yardımcı olan var mı?

+0

extRight ve extBot için kod olması gerekir http://answers.opencv.org/question/64433 – sturkmen

cevap

3

bir std::vector<cv::Point> dan başlayarak, x, ve sağ puan bıraktı bulmak için koordinatları üzerinde çalışır ve yüst ve alt bulmak için koordinatları çalışır uygun bir karşılaştırıcı ile std::max_element ve std::min_element kullanabilirsiniz puan:

// 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

bakmak Karşılaştırma ters (lhs.x> extRight ve lhs.y için rhs.x> extBot için rhs.y) – bantic

+0

@bantic haklısınız ... aslında bu kod sucks;) minmax_element asap kullanarak yeniden yazacağım – Miki