我是opencv的新手(在c ++中),我正在尝试实现线路检测。
我有一张有几行的图片,我正在尝试确定线条之间的距离。我知道有Hough,Canny等,但是如何获得不同线的坐标来计算线之间的距离?我应该使用opencv轮廓函数还是有更好的方法?我不需要完整的代码示例,但有人能告诉我完成工作的最佳方法吗?
答案 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
中的教程。