Разработать навигатор для игры? Смотрите! (часть 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 в описании профиля.

Разработать навигатор для игры? Смотрите! (часть 3.3) | Сетка — социальная сеть от hh.ru