他们并不完美。如何将它们分成多个列表,其中每个列表包含在同一水平线上看起来像的坐标。
这里有样本数据:
[(24, 228), (25, 194), (26, 162), (29, 83), (30, 52), (31, 17), (63, 223), (63, 194), (64, 162), (65, 84), (66, 49), (67, 19), (100, 228), (100, 190), (101, 158), (102, 81), (102, 54), (102, 20), (137, 227), (137, 195), (137, 163), (137, 86), (137, 52), (137, 22), (172, 23), (172, 57), (172, 87), (173, 163), (173, 195), (173, 227), (206, 24), (206, 58), (207, 84), (208, 159), (208, 191), (209, 223)]
答案 0 :(得分:1)
由于你对水平线感兴趣,所以你关心的每个点都是它的坐标。我将y坐标按升序排序,然后通过此列表将其切割成相邻点之间的间隙超过某个阈值的段。剩下的每个分段都是同一水平线上的一组点。
答案 1 :(得分:1)
这应该可以解决问题:
data = np.array([(24, 228), (25, 194), (26, 162), (29, 83), (30, 52), (31, 17), (63, 223), (63, 194), (64, 162), (65, 84), (66, 49), (67, 19), (100, 228), (100, 190), (101, 158), (102, 81), (102, 54), (102, 20), (137, 227), (137, 195), (137, 163), (137, 86), (137, 52), (137, 22), (172, 23), (172, 57), (172, 87), (173, 163), (173, 195), (173, 227), (206, 24), (206, 58), (207, 84), (208, 159), (208, 191), (209, 223)])
thresh = 10
groups = []
for point in data:
x,y = point
for g in groups:
if abs(g[0][1] - y) < thresh:
g.append(point)
break
else:
groups.append([point])
由你根据自己的意愿调整它......