Sketch Imitation (SFML/C++)


Downlode code: source code

На вход подается черно-белый рисунок (эскиз), а программа имитирует руку художника.

 

Реализовать можно разными методами, в данном случае алгоритм такой:

Карандашный эскиз - черно-белое изображение, каждый пиксель принимает значение от 0 (черный) до 255 (белый). Разобьем все точки на несколько групп в зависимости от яркости, к примеру от 0 до 80 (первый проход, самый темные точки как правила контуры, дальше от 80 до 150 (посветлее, штрихи) и т.д.). Каждую группу рисуем отдельно: берем случайную точку, находим ближайшую  к ней, рисуем её на экран, далее находим ближайшую и т.д. Хорошо было бы заранее упорядочить все точки, но это занимает очень много времени, поэтому в данной реализации вычисления происходят по ходу дела (что, конечно, ограничивает скорость). Программа разбивает точки автоматически (на равное количество в кадой группе), что не всегда интересно выглядит визуально, поэтому точки разбивания можно подобрать вручную (вторая строчка в файле Settings.txt).

К примеру файл setting.txt может выглядеть так:

images/mypicture.jpg
75 130 210

Значит промежутки разбивания от 0 до 75, далее от 75 до 130 и т.д.


Поделиться: