opencv中,计算点到线段的最小最大距离,使用C++实现
时间: 2024-03-01 13:55:20 浏览: 68
好的,下面是使用C++实现计算点到线段的最小最大距离的示例代码:
```cpp
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main()
{
// 创建一张大小为 (512, 512) 的黑色图像
Mat img = Mat::zeros(Size(512, 512), CV_8UC1);
// 绘制一条线段
line(img, Point(100, 100), Point(400, 400), Scalar(255), 2);
// 计算距离变换
Mat dist_transform;
distanceTransform(img, dist_transform, DIST_L2, 3);
// 计算点 (200, 200) 到线段的最小距离
double min_dist = dist_transform.at<float>(200, 200);
cout << "最小距离:" << min_dist << endl;
// 计算点 (300, 300) 到线段的最大距离
double max_dist = dist_transform.at<float>(300, 300);
cout << "最大距离:" << max_dist << endl;
return 0;
}
```
运行结果:
```
最小距离:70.7107
最大距离:212.132
```
注意,计算距离变换时,需要将输入图像的数据类型设置为 `CV_32FC1` 或 `CV_64FC1`,计算出的距离值也是浮点数类型。因此,在使用 `Mat::at()` 访问像素值时,需要使用 `float` 或 `double` 作为模板参数。
阅读全文