OpenCV线路检测一般

时间:2012-11-22 15:39:56

标签: c++ opencv feature-detection

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

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

1 个答案:

答案 0 :(得分:13)

线检测经常导致使用Hough变换,Canny边缘检测器和轮廓检测仅在需要时作为方便的预处理器。

如果您有平行线,请使用

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

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

  

lines - 行的输出向量。每行由a表示   双元向量(ρ,θ)。 ρ是坐标的距离   原点(0,0)(图像的左上角)。 θ是线旋转   弧度角度(0~垂直线,π/ 2~水平线)   [opencv2refman.pdf]

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

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

  

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

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