使用OpenCV C++查找等高线中的极值点

Finding extreme points in contours with OpenCV C++

本文关键字:等高线 OpenCV C++ 查找 使用      更新时间:2023-10-16

我尝试过实现这段代码,但当我想按照本教程确定轮廓的最极端点时,我遇到了麻烦。

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

有人能帮我解决这个问题吗?

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;
                  });