目录
1 概念讲解及用处
点到轮廓的距离是指一个点到给定轮廓的最短距离。在计算机视觉和图像处理中,点到轮廓的距离有着广泛的应用,例如:
特征提取:通过计算点到轮廓的距离,可以获得描述对象形状特征的信息。
目标识别:通过比较点到轮廓的距离,可以判断两个对象是否相似或匹配。
边界检测:通过检测点到轮廓的距离变化,可以找到轮廓的边界。
2 函数详解
OpenCV提供了函数来计算点到轮廓的距离pointPolygonTest()。
2.1 pointPolygonTest()
double pointPolygonTest(
InputArray contour,
Point2f pt,
bool measureDist
);
contour:输入参数,表示要计算距离的轮廓。
pt:输入参数,表示要计算距离的点。
measureDist:可选参数,指定是否计算距离,默认为true。
注意:
(1)输入的轮廓必须是一个单个轮廓(即单个闭合轮廓),而不是包含多个轮廓的容器。
(2)如果measureDist设置为false,函数将返回一个正负值,表示点在轮廓内部(负值)还是外部(正值),点在轮廓上(0)。
3 用C++编写代码进行实现
以下是一个使用OpenCV计算点到轮廓距离的示例代码:
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
// 读取图像并转为灰度图像
Mat image = imread("contour.jpg");
Mat gray;
cvtColor(image, gray, COLOR_BGR2GRAY);
// 二值化图像
Mat binary;
threshold(gray, binary, 127, 255, THRESH_BINARY);
// 查找轮廓
std::vector<std::vector<Point>> contours;
findContours(binary, contours, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);
// 计算点到轮廓的距离
Point2f point(100, 100);
double distance = pointPolygonTest(contours[0], point, true);
// 输出结果
std::cout << "Distance from point to contour: " << distance << std::endl;
return 0;
}