【发布时间】:2018-04-29 02:36:08
【问题描述】:
我有一个 std::vector<:point> 数组,看起来像-
[49, 500]
[49, 129]
[441, 501]
[49, 374]
[440, 374]
[440, 259]
[440, 128]
[49, 260]
让我们将数组元素视为[x, y]。现在我需要从数组中获取 4 个元素 -
- 最低 x 最高 y
- 最低 x 最低 y
- 最高 x 最低 y
- 最高 x 最高 y
目前,我正在使用函数根据条件进行排序,然后获取一个点。
bool SortForMinXMaxY(const Point & a, const Point &b)
{
return (a.x < b.x || a.y > b.y) ;
}
使用 C++ 和 OpenCV 实现目标的标准方法应该是什么?
【问题讨论】:
-
你已经看过here了吗?
-
也许你可以找到“与边界矩形左上角距离最小的点”,但不知道如何在排序中使用它。也许只是……像 close2tlCorner 指向这两个点的边界矩形?
-
正如@Micka 所说,“最低 x 和最高 y”是什么意思? x 非常低但 y 值中等的值与 x 稍高但 y 高得多的值相比如何?你只是想比较 x-y 吗?
-
那么给定点 (0,0) 和 (1,1) 你想要哪一个?
-
好吧,最低的 x 是 47,因为 47 没有其他点,所以这是赢家?如果没有最低 x(例如 47)和同时最高 y(例如 502)的点,但只有介于两者之间的点,您必须告诉算法您关于 x 和 y 如何协同工作的指标。我想告诉你,你的标准没有很好地定义你的问题。试试 a.x-a.y
标签: c++ algorithm sorting opencv point