8

我有一组坐标,例如:

10,40; 9,27; 5,68; 7,55; 8,15;

如何在不丢失已排序 Y 轴的正确 X 轴的情况下对这些坐标进行排序。

从上面的示例中,我想对坐标进行排序,以便正确的输出为:

8,15; 9,27; 10,40; 7,55; 5,68。

任何建议将不胜感激。谢谢你。

4

3 回答 3

21

std::sort 的文档

#include "opencv2/core/core.hpp"
#include <algorithm>    // std::sort

// This defines a binary predicate that, 
// taking two values of the same type of those 
// contained in the list, returns true if the first 
// argument goes before the second argument
struct myclass {
    bool operator() (cv::Point pt1, cv::Point pt2) { return (pt1.y < pt2.y);}
} myobject;

int main () {
    // input data
    std::vector<cv::Point> pts(5);
    pts[0] = Point(10,40);
    pts[1] = Point(9,27);
    pts[2] = Point(5,68);
    pts[3] = Point(7,55);
    pts[4] = Point(8,15);

    // sort vector using myobject as comparator
    std::sort(pts.begin(), pts.end(), myobject);
}
于 2013-05-28T16:23:51.497 回答
1

您需要指定存储坐标组的精确程度。

最简单的方法是将它们存储为您创建的新结构并在其顶部应用基本冒泡排序算法,使用 Y 值作为排序参数。然后,当您“交换”结构的位置时,X 和 Y 保持在一起。

struct Vector {
  float x;
  float y;
};
于 2013-05-28T16:12:59.767 回答
0

您可以创建一个映射坐标的类,如果您使用 STL 作为向量,则可以使用sort 方法根据 Y 坐标对整个向量进行排序。

这里这里是来自堆栈的类似问题。

于 2013-05-28T16:13:53.017 回答