opencv将无序的矩阵点坐标排列成有序的,坐标存储在vector<Point>
时间: 2024-12-22 13:25:39 浏览: 7
OpenCV(Open Source Computer Vision Library)是一个广泛使用的计算机视觉库,提供了大量的图像处理和计算机视觉功能。当你有一个无序的点集,每个点通常由一对坐标(x, y)表示,如果想要把这些点组织成一个有序的形式,比如一个`std::vector<cv::Point>`,你需要按照一定的顺序存储这些点。
`cv::Point` 是 OpenCV 中用于表示二维像素位置的一个结构体,它包含两个成员变量:`x` 和 `y`,分别代表点在图像中的水平和垂直坐标。
如果你有一个数组或列表,包含了一组点坐标,例如:
```cpp
std::vector<std::pair<int, int>> unordered_points = { {50, 100}, {150, 200}, {250, 300} };
```
你可以使用`std::vector<cv::Point>` 来存储这些点,并按照它们在图像中的自然顺序(通常是左上到右下)进行排序。首先,定义一个空的 `cv::Point` 变量,然后遍历原始的点集合,为每个点创建一个新的 `cv::Point` 并添加到 `vector<cv::Point>` 中:
```cpp
std::vector<cv::Point> ordered_points;
for (const auto& point : unordered_points) {
cv::Point ordered_point(point.second, point.first); // 注意Y轴是从上往下计数,所以交换 x 和 y
ordered_points.push_back(ordered_point);
}
```
这样,`ordered_points` 就会是一个按照从左上角到右下角顺序排列的点集合了。
阅读全文