写一个角点排序得C++
时间: 2023-08-04 13:16:52 浏览: 128
以下是一个简单的角点排序的 C++ 代码示例:
```cpp
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main()
{
// 读取图像
Mat src = imread("test.png");
// 转换为灰度图像
Mat gray;
cvtColor(src, gray, COLOR_BGR2GRAY);
// 检测角点
vector<Point2f> corners;
goodFeaturesToTrack(gray, corners, 100, 0.01, 10);
// 对角点进行排序
sort(corners.begin(), corners.end(), [](Point2f a, Point2f b) {
return a.x < b.x;
});
sort(corners.begin(), corners.begin() + 2, [](Point2f a, Point2f b) {
return a.y < b.y;
});
sort(corners.begin() + 2, corners.begin() + 4, [](Point2f a, Point2f b) {
return a.y > b.y;
});
sort(corners.begin() + 4, corners.end(), [](Point2f a, Point2f b) {
return a.x > b.x;
});
// 在图像上绘制角点
for (int i = 0; i < corners.size(); i++) {
circle(src, corners[i], 5, Scalar(0, 0, 255), -1);
}
// 显示图像
imshow("src", src);
waitKey();
return 0;
}
```
该代码使用 OpenCV 库中的 `goodFeaturesToTrack` 函数检测图像中的角点,并对这些角点按照一定顺序进行排序。排序的方法是:首先按照 x 坐标从小到大排序,然后将前两个点按照 y 坐标从小到大排序,接着将第 3 和第 4 个点按照 y 坐标从大到小排序,最后将剩余的点按照 x 坐标从大到小排序。排序后,将排序结果绘制在图像上,并显示出来。
阅读全文