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