我是图像处理的新手,正在研究检测文档图像中的线条。我读了霍夫线变换的理论,但是我看不出为什么在opencv中调用该函数之前必须使用Canny,就像许多教程中所说的那样。在这种情况下找到边缘的意义何在?事实是,如果在HoughLines()之前不使用Canny或threshold,结果将非常困惑。我希望有人能为我解释原因。

我已阅读其中的2篇教程:

  • Imgproc Feature Detection
  • Hough Line Transform
  • 最佳答案

    简短答案

    cvCanny用于检测边缘,以及增加对比度和消除图像噪声。
    使用霍夫变换的霍夫线用于确定这些边是否为线。霍夫变换要求对边缘进行良好检测,以使其高效并提供有意义的结果。

    详细答案

    Hough Transform的局限性在Wikipedia上有更详细的描述。

    Hough变换的效率取决于累积像素的bin是否不同,例如像素与其周围邻居之间的直接对比,或者如果使用 mask 区域,则为像素区域及其周围区域。如果所有像素的累积值都相似,则没有任何东西可以像直线或圆一样突出。这导致颜色减少(颜色到灰度,灰度到黑白)以增加对比度。

    霍夫变换的参数数量还会增加投票在像素仓中的分布,并增加变换的复杂度,这意味着通常只有直线或圆可以使用它可靠地检测到,因为它们的参数少于3个。

    在运行霍夫变换之前,需要很好地检测边缘,否则其效率会进一步下降。此外,除非手动消除噪点,否则噪点图像在霍夫变换中无法很好地工作。

    10-08 09:18