Разработать навигатор для игры? Смотрите! (часть 3.3)
HTML-редактор карты: когда OpenCV нашел не только дороги, но и мусор.
После распознавания дорог стало ясно: нужна не очередная попытка сделать “умнее”, а инструмент для ручного ремонта.
Так появился отдельный HTML-редактор карты. Не красивый редактор уровней, а рабочая утилита: открыть маску, стереть мусор распознавания, дорисовать недостающий проезд, заштриховать разрыв, сохранить ручные правки в JSON и заново собрать road_graph.
По сути, это был момент взросления проекта. Я перестал ждать, что OpenCV сам станет дорожным инженером. Он нашел основу. Я дал себе инструмент, чтобы довести ее до состояния, пригодного для маршрутов.
В итоговых данных даже остался след этой возни: 1387 ручных штрихов, из них 1153 draw, 155 erase, 79 erasePatch.
Дальше очищенная маска превращается в скелет: толстая дорожная линия сжимается до тонкой нити по центру дороги.
```python raw_mask = np.asarray(Image.open(args.mask).convert("L")) > 127 count, labels, stats, _ = cv2.connectedComponentsWithStats( raw_mask.astype("uint8"), 8 ) mask = np.zeros_like(raw_mask, dtype=bool) for label in range(1, count): area = int(stats[label, cv2.CC_STAT_AREA]) if area >= args.min_component_area: mask[labels == label] = True skeleton = skeletonize(mask) paths, skeleton_points, key_points = build_skeleton_paths(skeleton) ```
После этого появляется уже не картинка, а структура. Скелет можно нарезать на узлы и ребра. Узел - точка на дороге. Ребро - проезд между двумя точками. У ребра есть длина, стоимость и класс дороги. Вот примерно в этот момент красивая карта окончательно стала данными.
Если вам интересно посмотреть проект целиком - ссылка на мой GitHub в описании профиля.