извлекать точки, которые описывают линии на чертеже - PullRequest
0 голосов
/ 09 апреля 2020

У меня есть черно-белое изображение штриховых рисунков, которое может выглядеть примерно так: o

, но может быть намного сложнее.

Я хочу преобразовать этот рисунок в std::vector<std::vector<cv::Point>> (в значительной степени контур). За исключением проблемы, я не могу просто назвать контур. Вызов контура даст мне упорядоченный набор точек, которые очерчивают эту форму. Я хочу упорядоченный набор точек (возможно, даже несколько), которые вернут мне саму линию.

Это очень близко к проблеме контура, за исключением того, что требуется "половина" количества точек.

Я написал метод, который найдет мне точки, которые являются "соединителями", и точки которые являются «конечными точками».

Итак, в этом примере есть 3 конечных точки и 1 соединитель.

Мой алгоритм следующий:

get actual contours = [[contour]]
classify points to get [endPoints], [connections] map

criticalSeen = 0
for each contour in contours
     If seen[current point] continue;

     If criticalSeen >= 1
          append current point to currPoints
          seen[current point] = true
     If criticalSeen == 0
         continue

     If criticalSeen == 2
          criticalSeen = 1
          append currPoints to result
          reset currPoints to empty
return result
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...