对象轮廓上的opencv角点检测

时间:2014-04-04 14:42:15

标签: c++ opencv image-processing

我有一个冶炼立方体的图像,随着时间的推移形成一个液滴。到目前为止,我提取了它的轮廓,但接下来我需要区分物体和表面。我的想法是检测物体接触表面的角落,但我很难找到一个合理的方法如何这样做(最好使用opencv的c ++接口)。我很感激任何建议 以下是提取轮廓的一些示例:
1 2 3 4

编辑: @Haris:

我尝试了一个你的建议的变体,它正在为我做这个工作:

r1 r2 r2

在近似轮廓i中,从左侧逼近,寻找具有指定范围内的值的第一个角度,然后从右侧开始。由于近似轮廓点是原始轮廓点的子集,然后我识别原始序列中的2个角点,并在两个角处切割它。中间部分我作为液滴,左右部分,我重新定位为我的表面线。可能有更好,更稳定的方法,但这对我有用。谢谢!

1 个答案:

答案 0 :(得分:7)

您可以尝试这种方法,

  1. 查找contour and approxPolyDP.

  2. 假设您有像P1,P2,P3等近似点...

  3. 现在计算连续线之间的角度,即线(P1,P2),线(P2,P3)等之间的角度。并检查每条调整线的角度差异,如果差异接近90度你可以说有一个角落。

  4. 对于Angle,您可以使用等式

    double Angle = atan2(y2 - y1, x2 - x1) * 180.0 / CV_PI;