使用OpenCV C ++查找轮廓中的极值点

时间:2016-04-13 07:54:35

标签: c++ image-processing opencv3.0

我试图实现这个code,但是当我想确定轮廓的最极端点时,我遇到了麻烦。

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

任何人都可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:3)

std::vector<cv::Point>开始,您可以将std::max_elementstd::min_element与适当的比较器一起使用,该比较器适用于x坐标以查找 left 正确的点,并在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;
                  });