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