python - 在二值图像上分割重叠的粗线

标签 python opencv line-segment opencv-drawcontour

在将各种预处理和检测管道应用于原始图像后,我确实有一个二进制图像,如下所示。
Intersecting Runways
如图所示,实际上有 2 条跑道(停机坪)供飞机在交叉区域交叉使用。我需要的是分割两条跑道并返回它们的轮廓。我已经检查了有关轮廓特征的 opencv 函数,但没有运气。 cv2.fitLine看起来没问题,但只有在轮廓中只有一条线时才有效。应用蒙版后的图像应如下所示:
enter image description here

最佳答案

这是一种可能的方法,刚刚在终端中使用 完成ImageMagick ,但你应该可以在 Python 中使用 Wand 做几乎相同的事情。或与 scikit 图像 medial_axis .
首先,对图像进行骨架化:

magick runways.png -threshold 50% -morphology Thinning:-1 Skeleton skeleton.png
enter image description here
然后运行“霍夫线检测”以查找长度超过 130 像素的线并以表格形式询问结果:
magick skeleton.png -hough-lines 9x9+130 mvg:-
输出
# Hough line transform: 9x9+130
viewbox 0 0 464 589
# x1,y1 x2,y2 # count angle distance
line 297.15,0 286.869,589  # 255 1 476
line 0,591.173 464,333.973  # 189 61 563
这意味着它已检测到 2 行:
  • 从坐标 297,0 到坐标 286,589 的线,长度为 255 像素,与垂直方向成 1 度
  • 从坐标 0,591 到坐标 464,333 的直线,长度为 189 像素,与垂直方向成 61 度

  • 只是为了说明,我将第一个绘制为红色,第二个绘制为绿色:
    magick runways.png                       \
       -fill red  -draw "line 297,0 286,589" \
       -fill lime -draw "line 0,591 464,333" result.png
    
    enter image description here
    关键词 :Python、图像处理、骨架、骨架化、细化、跑道、跑道、交叉口、霍夫线检测。

    关于python - 在二值图像上分割重叠的粗线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63435355/

    相关文章:

    Python ExcelWriter 格式 'all borders'

    opencv - 有没有办法访问用opencv拍摄的帧进行加密?

    algorithm - 查找数组中被给定线段穿过的单元格

    javascript - 使用 Python 抓取 Meteor

    python - 在 pandas 中使用 mm-dd-YY 到 YY-mm-dd 格式处理日期

    python - 可靠地处理 pandas 中的 nans

    python - 如何正确使用matplotlib渲染图像直方图?

    android - 如何做多语言Tesseract-ocr

    c# - 试图找到一种算法来检测图像中的矩形

    Matlab - 检测线段和圆之间碰撞的功能失败