![]() |
OpenCV 4.12.0
开源计算机视觉
|
我们在关于轮廓的第二章中看到了什么是凸包。对象与此凸包的任何偏差都可以被认为是凸缺陷。我们可以使用图像来可视化它。我们画一条连接起点和终点的线,然后在最远点画一个圆。
我们使用函数:cv.convexityDefects (轮廓, 凸包, 凸缺陷)
| contour | 输入轮廓。 |
| 凸包 | 使用 convexHull 获得的凸包,应包含构成凸包的轮廓点的索引 |
| 凸缺陷 | 凸缺陷的输出向量。每个凸缺陷表示为 4 个元素(start_index, end_index, farthest_pt_index, fixpt_depth),其中索引是原始轮廓中凸缺陷开始、结束和最远点的从 0 开始的索引,并且 fixpt_depth 是最远轮廓点和凸包之间距离的定点近似值(具有 8 个小数位)。也就是说,要获得深度的浮点值,将是 fixpt_depth/256.0。 |
此函数查找图像中的点与轮廓之间的最短距离。它返回的距离当点在轮廓外时为负数,当点在轮廓内时为正数,如果点在轮廓上则为零。
我们使用函数:cv.pointPolygonTest (轮廓, 点, measureDist)
| contour | 输入轮廓。 |
| pt | 针对轮廓测试的点。 |
| measureDist | 如果为 true,则该函数估计从点到最近轮廓边缘的有符号距离。否则,该函数仅检查该点是否在轮廓内。 |
OpenCV 自带一个函数 cv.matchShapes(),它使我们能够比较两个形状或两个轮廓,并返回一个显示相似性的度量。结果越低,匹配越好。它是基于 hu-moment 值计算的。文档中解释了不同的测量方法。
我们使用函数:cv.matchShapes (contour1, contour2, 方法, parameter)
| contour1 | 第一个轮廓或灰度图像。 |
| contour2 | 第二个轮廓或灰度图像。 |
| 方法 | 比较方法,请参阅 cv::ShapeMatchModes |
| 参数 | 特定于方法的参数(目前不支持)。 |