我在图像上使用OpenCV方法(C ++)找到了轮廓和外壳。我想绘制缺陷点。我通过调用
找到了缺陷点vector<Vec4i> defects;
convexityDefects(contours, hull, defects);
每个缺陷有4个整数。哪一个是x坐标?我想得到缺陷点的坐标。我将绘制黑色线条的起始点。
答案 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_index
,end_index
,farthest_pt_index
,{{ 1}}),其中索引是凸起缺陷的起始,终点和最远点的原始轮廓中基于0的索引,而fixpt_depth
是定点之间的距离的定点近似(具有8个小数位)最远的轮廓点和船体。也就是说,获取深度的浮点值将为fixpt_depth
。
因此,每个凸性缺陷由fixpt_depth/256.0
start_index
参数中的end_index
到countour
的几个点组成。