在将各种预处理和检测管道应用于原始图像后,我确实有一个二进制图像,如下所示。
如图所示,实际上有 2 条跑道(停机坪)供飞机在交叉区域交叉使用。我需要的是分割两条跑道并返回它们的轮廓。我已经检查了有关轮廓特征的 opencv 函数,但没有运气。 cv2.fitLine
看起来没问题,但只有在轮廓中只有一条线时才有效。应用蒙版后的图像应如下所示:
最佳答案
这是一种可能的方法,刚刚在终端中使用 完成ImageMagick ,但你应该可以在 Python 中使用 Wand 做几乎相同的事情。或与 scikit 图像 和 medial_axis .
首先,对图像进行骨架化:
magick runways.png -threshold 50% -morphology Thinning:-1 Skeleton skeleton.png
然后运行“霍夫线检测”以查找长度超过 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 行:只是为了说明,我将第一个绘制为红色,第二个绘制为绿色:
magick runways.png \
-fill red -draw "line 297,0 286,589" \
-fill lime -draw "line 0,591 464,333" result.png
关键词 :Python、图像处理、骨架、骨架化、细化、跑道、跑道、交叉口、霍夫线检测。
关于python - 在二值图像上分割重叠的粗线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63435355/