【问题标题】:How to count number of lines (Hough Trasnform) in OpenCV如何计算 OpenCV 中的行数(霍夫变换)
【发布时间】:2010-01-08 08:11:34
【问题描述】:
我成功地将图像中的发丝检测为线条。我看到输出图像将每根头发检测为线。我使用cvHoughLines2(),方法参数为CV_HOUGH_PROBABILISTIC。
现在我想数一下这些行。输出图像在每根头发上显示 1 或 2 条线。我看到每条线都由小线段组成。所以很难直接得到他们的总数。
对此有何建议?
谢谢,
普雷迪普
【问题讨论】:
标签:
opencv
line
hough-transform
【解决方案1】:
实际上,使用 Canny 边缘检测器可能会更好。根据您的描述,它似乎比霍夫变换有几个关键优势:
- 响应任意形状的轮廓,而不仅仅是直线;
- 执行降噪和非最大抑制以最小化响应;和
- 使用更宽松的阈值进行第二次检测以“跟踪”或“固化”边缘。
如果参数正确,它可能能够用一条连续的线唯一地检测每根头发。
这是在 OpenCV 中的 cvCanny() 函数中实现的。使用threshold1 和threshold2 参数(第3 个和第4 个参数)的值来试验检测和跟踪。
至于实际计算行数,我不确定如何最好地处理这个问题(Canny 输出与 Hough 变换输出的形式有些不同),但您可能会发现使用独特的实心边缘比使用碎片化更容易线参数集。
【解决方案2】:
hough 函数应该在 OpenCV2 中返回一个向量,或者在 OpenCV1 中返回一个 CvSeq。您可以轻松获取它们的长度并遍历它们。有关详细信息,请参阅 OpenCV 文档中的示例代码。