opencv 计算轮廓所有点到某一点的距离
时间: 2024-09-27 22:03:26 浏览: 33
Java+opencv3.2.0实现轮廓检测
OpenCV(Open Source Computer Vision Library)是一个开源计算机视觉库,提供了丰富的图像处理和计算机视觉功能。如果你想要计算轮廓上所有点到某个特定点的距离,你可以使用OpenCV中的`minDistance()`函数,这个函数可以帮助你在轮廓边界上找到离给定点最近的点。
以下是一个简单的示例代码片段,展示了如何做到这一点:
```cpp
#include <opencv2/opencv.hpp>
cv::Mat image; // 假设已经加载了图像并获取到了contours和 hierarchy
std::vector<cv::Point> contourPoints = cv::contourApproximation(contour, cv::CHAIN_APPROX_SIMPLE); // 获取轮廓点
cv::Point pointToMeasureFrom; // 需要测量距离的点
double minDistance = std::numeric_limits<double>::max();
int closestIndex = -1;
for (size_t i = 0; i < contourPoints.size(); i++) {
double dist = cv::norm(contourPoints[i] - pointToMeasureFrom);
if (dist < minDistance) {
minDistance = dist;
closestIndex = i;
}
}
// minDistance 就是最短距离,closestIndex 是对应的轮廓点索引
```
在这个例子中,我们首先从轮廓(`contour`)中提取点,然后遍历这些点,计算每个点到指定点(`pointToMeasureFrom`)的欧氏距离。`cv::norm()`函数负责计算两点之间的距离。如果当前点的距离小于之前记录的最小值,就更新最小距离和最近点的索引。
请注意,你需要确保`contour`变量已经被正确填充,并且`contourApproximation()`已经对轮廓进行了简化,以便于后续操作。
阅读全文