【问题标题】:OpenCV line detection in general一般的OpenCV线检测
【发布时间】:2012-11-11 01:09:26
【问题描述】:

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

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

【问题讨论】:

  • 您无需在帖子中添加签名 - 您的用户卡会自动添加。

标签: c++ opencv feature-detection


【解决方案1】:

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

如果您有平行线,请使用

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

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

lines - 线的输出向量。每条线由一个代表 二元向量 (ρ, θ) 。 ρ 是与坐标的距离 origin (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 的文档中的 opencv_tutorials.pdf 中找到教程。

【讨论】:

  • 感谢您的回答!在下一步中,我想估计图片中线条的质量。这些线是开槽的边缘,应该是平行的。在几个地方,凹槽被损坏,边缘不再平行。有没有一种简单的方法来获得实际边缘与直线的偏差?
  • 嗯,我不确定。我认为值得将其作为一个单独的问题发布。
猜你喜欢
  • 2011-05-28
  • 2015-05-25
  • 2023-03-10
  • 2017-10-31
  • 2017-06-28
  • 1970-01-01
  • 2019-04-28
  • 2013-03-24
  • 2016-08-21
相关资源
最近更新 更多