6

我是 opencv 的新手(在 c++ 中),我正在尝试实现线路检测。

我有一张带有几条线的图片,我正在尝试确定线条之间的距离。我知道有 Hough、Canny 等,但我怎样才能得到不同线条的坐标来计算线条之间的距离?我应该使用opencv轮廓函数还是有更好的方法?我不需要完整的代码示例,但谁能告诉我完成工作的最佳方法?

4

1 回答 1

13

线检测通常导致使用霍夫变换,Canny 边缘检测器和轮廓检测仅在需要时充当方便的预处理器。

如果您有平行线,请使用

void HoughLines(InputArray image, OutputArray lines, double rho, double theta, int threshold, double srn=0, double stn=0 )

用于检测第二个参数将包含检测的行:

线 - 线的输出向量。每条线由一个二元素向量 (ρ, θ) 表示。ρ 是距坐标原点 (0, 0)(图像左上角)的距离。θ 是以弧度为单位的线旋转角度( 0 ∼ 垂直线, π/2 ∼ 水平线 )。
[opencv2refman.pdf]

这意味着,两条线之间的距离应该是abs(rho1-rho2),距离是 的第一列中像素值之间的绝对差lines。(注意:方法应该在CV_HOUGH_STANDARD这里!)

对于非平行线,您必须定义您认为的距离,但 OpenCV 可能仍会为您提供每条检测到的线的端点坐标。
你只需要使用method = CV_HOUGH_PROBABILISTIC.

CV_HOUGH_PROBABILISTIC 概率霍夫变换(如果图片包含一些长线性段,则更有效)。它返回线段而不是整条线。每个段由起点和终点表示,并且矩阵必须是(创建的序列将是)CV_32SC4 类型。
[opencv2refman.pdf]

您还可以在opencv_tutorials.pdf已安装 OpenCV 的文档中找到教程。

于 2012-11-22T16:43:14.903 回答