Учитывая контур, описывающий края формы S в OpenCV / Python, какие методы можно использовать для прослеживания кривой вдоль центра фигуры?

Учитывая контур, обозначающий край буквы S (например, в комиксах), как я могу получить ряд точек вдоль позвоночника этой буквы, чтобы позже представить эту форму с использованием линий, кубического сплайна или другой кривой-представляющей техники ? Я хочу обрабатывать и представлять форму с использованием 30-40 точек в Python / OpenCV.

Морфологическая скелетонизация может помочь в этом, но операция всегда, кажется, порождает ошибочные ветви. Есть ли лучший способ обрушить контур только в форме буквы «S»?

  • Обнаружение, если объект с одного изображения находится на другом изображении с помощью OpenCV
  • Карты воспроизведения OCR
  • Выполнение преобразования ширины штриха (SWT) (Python)
  • Вычислить положение камеры в OpenCV Python
  • Каковы правильные значения использования / параметра для HoughCircles в OpenCV для обнаружения Iris?
  • Вычисление процента перекрытия перекрытия, для оценки детектора изображения
  • введите описание изображения здесь

    В приведенном ниже примере вы можете увидеть ошибочный язык змеи, как ветви, которые производятся морфологическим скелетонированием. Я не знаю, справедливо ли говорить, что они ошибочны, если это то, что должен делать алгоритм, но для меня я не хотел бы, чтобы они были там.

    введите описание изображения здесь

    Ниже приведен комикс без алфавита:

    введите описание изображения здесь

    Еще одна проблема с скелетонизацией заключается в том, что она является дорогостоящей вычислительной машиной, но если вы знаете способ сделать ее надежной для формирования «змеиного языка», как ветви, тогда я попробую.

  • Разделите изображение на 5x5 блоков в python и вычислите гистограмму для каждого блока
  • Как показать все изображение при использовании OpenCV warpPerspective
  • Объединение двух изображений с OpenCV
  • Выполнение преобразования ширины штриха (SWT) (Python)
  • API-интерфейс OpenCV python: FlannBasedMatcher
  • как выполнить стабильное обнаружение угла глаз?
  • 2 Solutions collect form web for “Учитывая контур, описывающий края формы S в OpenCV / Python, какие методы можно использовать для прослеживания кривой вдоль центра фигуры?”

    Фактически векторизация шрифтов не является тривиальной проблемой и довольно сложной. Для правильной векторизации шрифтов с использованием кривой Безье вам понадобится трассировка. Существует много библиотеки, которую вы можете использовать для трассировки изображения, например, Potrace . Я не знаю, используя python, но на основе моего опыта, я сделал аналогичный проект, используя c ++, описанный ниже:

    A. Установите контур, используя кубический безье

    Этот метод довольно прост, хотя нужно много работать. Я считаю, что это также хорошо работает, если вы хотите подгонять скелеты, полученные от истончения.

    1. Найдите контур / край объекта, вы можете использовать функцию OpenCV findContours ()
    2. Вся фигура не может быть представлена ​​с использованием одного кубического безье, поэтому разделите их на несколько сегментов с помощью Ramer-Douglas-Peucker (RDP) . На этом этапе важно не удалять точки, использовать RDP только для сегментации точек. См. Цветные сегменты на изображении ниже.
    3. Для каждого сегмента , где S – множество из n точек S = (s0, s1, … Sn) , приспосабливаем кубический безье, используя наименьший квадратный фитинг

    введите описание изображения здесь

    Иллюстрация наименее квадратного монтажа:

    введите описание изображения здесь

    B. Резолюция Независимая кривая рендеринга

    Этот метод, описанный в этой статье , довольно сложный, но один из лучших алгоритмов, доступных для отображения векторных шрифтов:

    1. Найдите контур (тот же метод A)
    2. Используйте RDP, в отличие от метода A, используйте RDP для удаления точек, чтобы контур можно было упростить.
    3. Делайте треугольную триангуляцию.
    4. Нарисуйте кривую Безье на внешних краях, используя метод, описанный в документе

    введите описание изображения здесь

    Может быть полезной следующая простая идея.

    1. Вычислить медиальную ось внешнего контура. Это обеспечило бы связность кривых.

    2. Найдите точки ветвления. В зависимости от его длины вы можете удалить их, чтобы устранить проблему «змеиного языка».

    Надеюсь, поможет.

    Python - лучший язык программирования в мире.