左边原图,右边结果。
右图中,蓝色线为凸包,凸缺陷的起始点为黑色点,凸缺陷的起始点为绿色点,凸缺陷的最深点为红色点(即边缘点到凸包距离最大点)。
void convexityDefects(InputArray contour, InputArray convexhull, OutputArray convexityDefects)
convexityDefects 是存储 Vec4i 的向量(vector<varname>),函数计算成功后向量的大小是轮廓凸缺陷的数量,向量每个元素Vec4i存储了4个整型数据,
因为Vec4i对[]实现了重载,所以可以使用 _vectername[i][0] 来访问向量 _vactername 的第i个元素的第一个分量。再说 Vec4i 中存储的四个整形数据,OpenCV 使用这四个元素表示凸缺陷,
Vec4i 第一个元素 start_index,表示缺陷在轮廓上的开始处,他的值是开始点在函数第一个参数 contour 中的下标索引;
Vec4i 第二个元素 end_index, 顾名思义其对应的值就是缺陷结束处在 contour 中的下标索引;
Vec4i 第三个元素 farthest_pt_index, 是缺陷上距离 轮廓凸包(convexhull)最远的点;
Vec4i最后的元素 fixpt_depth,fixpt_depth/256 表示了 轮廓上以 farthest_pt_index 为下标的点到 轮廓凸包的(convexhull)的距离,以像素为单位。