opencv - HoughLines(opencv)之前的Canny有什么用?

标签 opencv edge-detection hough-transform

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

我读过的教程中有 2 个:

  1. Imgproc Feature Detection
  2. Hough Line Transform

最佳答案

简答题

cvCanny 用于检测边缘,以及增加对比度和去除图像噪声。 使用霍夫变换的 HoughLines 用于确定这些边缘是否为直线。霍夫变换需要很好地检测边缘,以提高效率并提供有意义的结果。

长答案

Hough Transform 的局限性在维基百科上有更详细的描述。

霍夫变换的效率依赖于累积像素的 bin 是不同的,例如像素与其周围相邻像素之间的直接对比,或者如果使用 mask 区域,则为像素区域及其周围区域。如果所有像素都具有相似的累加值,则没有什么会像直线或圆圈那样突出。这导致颜色的减少(彩色到灰度,灰度到黑白)以增加对比度。

霍夫变换的参数数量也增加了像素箱中的选票分布并增加了变换的复杂性,这意味着通常只有线或圆才能可靠地检测到,因为它们的参数少于 3 个。

在运行霍夫变换之前需要很好地检测边缘,否则其效率会进一步降低。除非事先去除噪声,否则噪声图像不能很好地用于霍夫变换。

关于opencv - HoughLines(opencv)之前的Canny有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9310543/

相关文章:

algorithm - FLANN 的使用可以归入机器学习吗?

node.js - 在Node.js中将图像转换为Uint8Array

c++ - 为什么基于Opencv DNN的(caffe)人脸检测器无法找到人脸?

image - OpenCV查找沿线的所有重要边

opencv - Canny 边缘检测器阈值给出不同的结果

python - 在 Fedora 24 上为 Python 3 安装 OpenCV

c++ - 仅计算强度降低的边缘

matlab - 如何在 MATLAB 中选择霍夫变换的最大强度?

matlab - matlab 和 openCV 中的 hough 变换错误?

python - 查找所有圆形对象