2016-04-13 16 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]) 

誰でもこの問題の解決に手伝ってもらえますか? x上で動作

+0

extRightとextBotのコードが持っている必要がhttp://answers.opencv.org/question/64433 – sturkmen

答えて

3

std::vector<cv::Point>から始めて、あなたは適切なコンパレータでstd::max_elementstd::min_elementを使用することができますが、ポイントを残し、そしてトップを見つけるために、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の場合はlhs.x> rhs.x、extBotの場合はlhs.y> rhs.y) – bantic

+0

あなたは正しいです...実際はこのコードは嫌です;)私はminmax_elementを使って書き直します – Miki

関連する問題