Интересные проекты: рендеринг изображений ASCII-символами

Posted by

ASCII Art представляет собой однофайловую библиотеку C/C++, которая позволяет преобразовывать изображение или видеокадр в печатные символы ASCII в режиме реального времени. При этом используется одно дерево решений. Производительность в реальном времени достигается за счет использования сравнения интенсивности пикселей внутри внутренних узлов дерева.

Как работает алгоритм

При использовании изображения или видеокадра выполняются следующие действия:

— Входное изображение разбивается на прямоугольные ячейки одинакового размера. Размер сетки соответствует высоте и ширине одной ячейки (т.е. символу шрифта), полученным из кодовой книги на этапе обучения.
— Для каждой ячейки из кодовой книги выбирается символ, который заменит в ней «сырые» пиксели. Этим занимается дерево решений, в которое подаются эти пиксели.
— Большой набор изображений переводится в ASCII с учётом индекса структурного сходства и используется в качестве обучающего набора данных.

Руководство по началу работы

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

— Сначала вызовите AsciiArtInit, чтобы инициализировать структуру ascii_render, определенную в заголовочном файле ascii_art.h.
— Подготовьте изображение, которое нужно обработать, переведя его в оттенки серого. Для этого можно использовать внешнюю библиотеку вроде cvtColor из OpenCV или встроенный интерфейс AsciiArtLoadImage.
— Выделите буфер, достаточно большой для хранения всех выходных данных. Количество необходимых байтов можно получить через интерфейс AsciiArtTextBufSize. Этот шаг является необязательным, если вы хотите не выводить текст, а получить двоичное изображение из ASCII-символов.
— Наконец, преобразуйте входное изображение в символы ASCII с помощью AsciiArtRender.

Ниже представлена простая программа на С, которая которая демонстрирует типичное использование этих интерфейсов.

Также доступна демо-версия программы.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *