Рендеринг изображений ASCII-символами | OTUS
⚡Подписка от OTUS!
Собери свой пул курсов на выгодных условиях. Подробности в чате →
Написать в чат

Курсы

Программирование
Разработчик программных роботов (RPA) на базе UiPath и PIX
-6%
Разработчик C#
-8%
Алгоритмы и структуры данных
-8%
Backend-разработчик на PHP
-8%
JavaScript Developer. Professional
-9%
Team Lead
-5%
Golang Developer. Professional
-6%
Agile Project Manager
-5%
Flutter Mobile Developer
-10%
MS SQL Server Developer
-8%
C++ Developer. Professional Android Developer. Professional Framework Laravel Cloud Solution Architecture Highload Architect Reverse-Engineering. Professional Kotlin Backend Developer React.js Developer VOIP инженер Нереляционные базы данных Scala-разработчик Супер-практикум по использованию и настройке GIT IoT-разработчик JavaScript Developer. Basic Advanced Fullstack JavaScript developer Unity Game Developer. Professional Супер-интенсив Azure
Инфраструктура
Супер-интенсив "Версионирование и командная работа с помощью Git"
-30%
Administrator Linux. Professional
-5%
Супер-интенсив «CI/CD или Непрерывная поставка с Docker и Kubernetes»
-30%
Разработчик программных роботов (RPA) на базе UiPath и PIX
-6%
Administrator Linux. Advanced
-8%
Infrastructure as a code in Ansible
-12%
Network engineer
-4%
MS SQL Server Developer
-8%
Cloud Solution Architecture Highload Architect Разработчик голосовых ассистентов и чат-ботов Мониторинг и логирование: Zabbix, Prometheus, ELK Супер-практикум по работе с протоколом BGP Супер - интенсив по паттернам проектирования Супер - интенсив по Kubernetes Архитектор сетей Супер-интенсив «IaC Ansible»
Специализации Курсы в разработке Подготовительные курсы
+7 499 938-92-02

Рендеринг изображений ASCII-символами

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

Screenshot_1-1801-a75e11.png

Как функционирует этот алгоритм?

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

Как начать работу с библиотекой?

Встроить ее в ваше приложение несложно. Для этого следует добавить ascii_art.c и заголовочный файл в ваше дерево исходного кода, а также загрузить шестнадцатеричную модель. Далее выполняются следующие API-вызовы: 1. Для инициализации структуры ascii_render, определенной в заголовочном файле ascii_art.h, сначала вызывается AsciiArtInit. 2. Подготавливается изображение, которое следует обработать. Это делается путем перевода этого изображения в оттенки серого. Тут подойдет библиотека типа cvtColor из OpenCV либо встроенный интерфейс AsciiArtLoadImage. 3. Выделяется буфер, который должен быть достаточно большим для хранения всех выходных данных. Число нужных байтов можно получить посредством интерфейса AsciiArtTextBufSize. Данный шаг не обязателен, если вы не хотите выводить текст, а желаете вместо этого получить двоичное изображение из символов ASCII. 4. Входное изображение преобразуется в ASCII-символы посредством AsciiArtRender.

Типичное применение интерфейсов можно посмотреть на простейшей программе, код которой размещен ниже:

Screenshot_2-1801-44c2f2.png

Ознакомиться с этим проектом подробнее можно здесь.

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
0 комментариев
Для комментирования необходимо авторизоваться