如何检测具有特定角度的角落

11

我有一张图片,上面有一个等边三角形和一个矩形:
等边三角形和矩形
我想仅仅检测出三角形的三个角落。我遵循了OpenCV Harris角点检测器教程,发现所有三角形的角点阈值为80(当矩形的四个角点阈值为255时)。但我没有找到阈值和角度之间的联系。

如何找到在[55,65]度范围内的角落呢?
以下是输出Mat http://pastebin.com/raw.php?i=qNidEAG0

附:我对CV非常陌生,希望您能提供更多细节!

1个回答

12

似乎我找到了可能的解决方案。 我已在Mathematica上实施并能够解释基本步骤。

  1. 使用查找角点运算符,并选取最强的角点。 使用哈里斯运算符。 角点
  2. 找到轮廓(cv :: FindContours)。

    轮廓

  3. 对于每个轮廓中的每个角落,画出一个圆并找到圆与轮廓相交的点。 OpenCV 中没有现成的函数,您应该自己实现它。

    交点

  4. 现在对于每个角点,您都有三个点的坐标:角点和轮廓两侧的两个点。 只需使用点积计算角度即可:

    角度估计

结果:

找到的角点


第一步,您的意思是找到cv::cornerHarris结果的所有局部极大值吗? - nvcnvn
很棒的解决方案!我认为在第三个点找到交点最简单的方法是在空白图像上画圆,然后在这个图像和轮廓图像上使用&运算符。结果应该是所有交点。 - cyriel
当轮廓之间的距离小于圆的半径时,这种方法就不起作用了。在这种情况下,您会得到许多错误的交点。 - Rasim
@brotherofken - 你说得对,但这很容易解决 - 只需在单独的图像上绘制每个圆形或找到角落之间的最小距离并使用较小的半径即可。 - cyriel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接