获取缺陷对象的坐标值

时间:2014-10-22 23:02:23

标签: c++ opencv contour convex-hull

我在图像上使用OpenCV方法(C ++)找到了轮廓和外壳。我想绘制缺陷点。我通过调用

找到了缺陷点
vector<Vec4i> defects;
convexityDefects(contours, hull, defects);

每个缺陷有4个整数。哪一个是x坐标?我想得到缺陷点的坐标。我将绘制黑色线条的起始点。

enter image description here

2 个答案:

答案 0 :(得分:1)

您需要的内容如下:Point p = contours[defects[d][2]]

我只引用文档中有意义的部分:

  

[...] 4元素整数向量:(start_index,end_index,farthest_pt_index,fixpt_depth),其中索引是凸性缺陷的原始轮廓中基于 0的索引[...] ]

因此返回的值表示原始轮廓中的索引。

defects[d]代表d - 轮廓。然后你选择了farthest_pt_index的第3个成员defects[d][2]。该整数是原始轮廓中距离船体最远的点的索引,即图中的下箭头。它的坐标:

Point p = contours[defects[d][2]]
int x = p.x
int y = p.y

如果你想知道这一点与船体有多远,你必须将第4个元素除以256:float p_distance = defects[d][3] / 256.0

答案 1 :(得分:0)

The doc on convexityDefects()

  

凸性缺陷 - 凸性缺陷的输出向量。在C ++和新的Python / Java接口中,每个凸性缺陷都表示为4元素整数向量(又名cv::Vec4i):( start_indexend_indexfarthest_pt_index,{{ 1}}),其中索引是凸起缺陷的起始,终点和最远点的原始轮廓中基于0的索引,而fixpt_depth是定点之间的距离的定点近似(具有8个小数位)最远的轮廓点和船体。也就是说,获取深度的浮点值将为fixpt_depth

因此,每个凸性缺陷由fixpt_depth/256.0 start_index参数中的end_indexcountour的几个点组成。