opencv - 检测图像中线条的好方法?

标签 opencv image-processing feature-detection edge-detection hough-transform

我编写了一些代码,使用 OpenCV 库来检测画在草地上的白线。我需要有人对我使用的方法发表意见(因为我确信有比我的方法更好的方法)。此外,我得到的结果不如我预期的好,因为图像的细微变化需要调整参数(并且我需要对固定参数进行操作)。

到目前为止我的方法:

  1. 从网络摄像头抓取图像(并明显变成灰度)
  2. 通过阈值过滤器运行它(使用 THRESH_TO_ZERO 模式,它将低于阈值的所有像素归零)。
  3. 模糊图像
  4. 通过侵 eclipse 过滤器运行它
  5. 通过 Canny 边缘检测器运行它
  6. 最后,使用这个处理过的图像并使用概率霍夫变换 HoughLinesP 找到线条

我应该更改过滤器的顺序吗?

附言我不太关心处理能力;我在 GPU B-) 上运行 HoughLinesP

此外,这是一个示例图像: original image

我得到的结果: 精明 with canny WITHOUT canny(略微调整参数) no canny this time

如有任何帮助或指导,我们将不胜感激!我只是不知道如何改进它!

更新 根据所选答案使用非常快速的骨架实现(带有大量模糊)后,我得到了这个: it works!

最佳答案

我会尝试使用 skeleton representation的图像。在这里,您的 canny 的问题在于,由于线的宽度,它基本上会产生两条线。

然后我会对其应用霍夫变换。

关于opencv - 检测图像中线条的好方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16665742/

相关文章:

java - OpenCV:从 Canny 画线

python - pylibdmtx 库,尝试除了不工作 - 断言 `value >= 0 && value < 256'

opencv - 使用 svm load 加载保存的文件时,在 openCV 中使用 svm predict 函数时出错

image-processing - 图像中的多个对象检测

c++ - 如何将着色表应用于我的灰度 8 位图像并在 Qt 中正确转换它?

image-processing - 图像每像素场景标签输出问题(使用 FCN-32s 语义分割)

matlab提取matfile中的特征

c# - 通过 SVD 从基本矩阵中提取翻译的正确方法

javascript - 如何特征检测浏览器是否支持动态 ES6 模块加载?

c++ - 如何在OpenCV C++中使用FeatureDetector?