【发布时间】:2019-05-17 10:10:14
【问题描述】:
我正在尝试在 python 中使用 openCV 找到曲线的最大宽度。我使用精明的边缘检测器来获取曲线的边界。然后我设法在它们之间创建了一个骨架,如附件image 中的红线所示。我现在需要找到这个骨架和白线段之间的距离,以便我可以将最大距离乘以 2 以获得宽度。简而言之,我需要蓝线的长度。
我尝试使用距离变换,但我没有闭合轮廓,所以我得到的宽度不正确。我还尝试了先膨胀再腐蚀以获得闭合轮廓,但这会改变曲线的宽度。卡在这个上面很久了。任何帮助将不胜感激。
【问题讨论】:
-
对于每个红色像素,搜索最近的白色像素(应该通过您正在寻找的正交线连接)并使用欧几里得距离计算距离。然后,您可以取所有距离的平均值或取最小值/最大值,具体取决于您想要的结果。
-
恕我直言,在您的情况下,距离变换没有问题。除了距离可能是错误的错误,这取决于轮廓中间隙的最大尺寸。
-
@TA,我如何为每个红色像素搜索最近的白色像素?你能解释一下逻辑吗?我认为这可能有效!
-
@Eshant 作为一种简单的方法:在像素的 8 邻域中搜索,然后随后扩大搜索环境的大小,直到获得成功。
标签: python opencv image-processing euclidean-distance opencv-contour