从左上角的坐标进行排序,以右下(Sort Coordinates from top left to

2019-09-28 03:45发布

我提取110个坐标从使用C ++和OpenCV一个10x11的LED阵列的轮廓,并将它们存储在一个载体中。 现在我想将它们从左上角到右下角排序,以检测是否在某一行和列的LED亮起。 我预先排序由y位置的坐标,以确保向量中的第一个10个坐标代表我的形象第一LED行。

vector<Point2f> centers;

bool compareY(Point2f p1, Point2f p2){
if(p1.y < p2.y) return true;
if(p1.y > p2.y) return false;
}

sort(centers.begin(), centers.end(), compareY);

现在我已经通过x位置对它们进行排序。 的问题是,从所述第一两行或任何其他排LED的x位置可以更小一点,则首先在一个排LED。 由于这一事实,他们必须从中心[0]排序,以中心[9],中心[10]到中心[20] ...逐列。 有没有人一个想法如何做到这一点?

提前致谢!

编辑:托管给分排序,但基于轮廓检测我的算法是没有强大到足以检测出所有的LED。 有没有人对一个可靠的方法来检测他们的想法?

Answer 1:

如果要执行的逐一由Y坐标进行排序,然后X坐标,你只需要提供一个合适的比较功能,真正实现了用严格的弱序。 例如

#include <tuple>

bool compareYX(const Point2f& p1, const Point2f& p2)
{
  return std::tie(p1.y, p1.x) < std::tie(p2.y, p2.x);
}

您也可以手动执行逐一比较,但是这是非常容易出错。



文章来源: Sort Coordinates from top left to bottom right