我有一个由线条组成的图像;如何使用OpenCV找到端点?
线条宽约20像素。它们转动,分支,并且可以成角度(尽管大多是水平和垂直)。请注意,霍夫不会工作,因为我的线条不直。 (也许这会使它们成为轮廓?)
我看了this answer,但它找到了极端点,而不是终点。我看了this,但我认为goodFeaturesToTrack()也会选择角落。也许使用细化算法,虽然OpenCV似乎没有?
下图显示了样本输入(蓝色)和所需的端点(洋红色)。
答案 0 :(得分:3)
I speak Chinese, while my English is poor
。
所以我只是发布我的核心步骤。
查找行端点的一般方法是:
答案 1 :(得分:2)
答案 2 :(得分:1)
对我来说最简单的方法是将图像细化为1px厚度,然后使用命中和未命中变换来检测端点。不幸的是,OpenCV中没有实现这些功能。通过命中或未命中变换也可以获得细化。您只需要在以下链接中详细描述: http://homepages.inf.ed.ac.uk/rbf/HIPR2/thin.htm
如果您对此有任何问题,请告诉我,因为我已全部实施。命中或错过变换可能非常古老而简单,但它是一个非常强大的工具。
答案 3 :(得分:1)
如果你的端点总是水平或垂直,你也可以尝试用一个简单的内核(方形应该等于你的线宽)和背景(宽度应该等于相邻端点之间的最小距离)来卷积图像。 。方形和背景的颜色(或强度)应与图像上的颜色(或强度)匹配。
在这种情况下,端点将沿着“两侧”沿着3“边”,线段和角“”匹配内核,其他形状应该具有较弱的响应。通过适当地阈值响应,您应该能够获得端点位置。
这种方法应该比你当前确定的方法更简单,更快(如果实施得当),但根据输入可能会有一些怪癖。不幸的是,我没有时间尝试实施它。