Задачи на работу с изображениями (BMP)

 

1.      Вывести заданный текст в BMP-файл. На входе: BMP-файл, координаты вывода текста, строка текста. Для ввода шаблонов букв можно в любом текстовом редакторе Windows напечатать все буквы и сделать скриншот окна.

2.      Нарисовать изображение двух сфер (возможно, пересекающихся) с учетом освещения. На входе: координаты и радиусы сфер, направление вектора освещения (источник света на бесконечности). Смотрим сверху с бесконечности. Освещенность определяется как произведение яркости света и cos угла между нормалью к поверхности и направлением света. Имеет смысл использовать z-буфер.

3.      На белом фоне нарисованы черные связные фигуры. Посчитать количество черных фигур. Использовать алгоритм волны.

4.      Прохождение лабиринта. На входе: нарисованный от руки лабиринт, красная точка начала обхода, синяя точка конца пути. На выходе: либо линия, соединяющая начало и конец обхода, либо сообщение об отсутствии пути. Использовать алгоритм волны.

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

6.      На изображении напечатанного текста реализовать эффект тени от букв.

7.      На изображении напечатанного черного текста на английском языке на белом фоне выделить все отдельные буквы и вывести все различные буквы в отдельные файлы. Считать, что все буквы представляются собой связные черные области. Использовать алгоритм волны.

8.      Написать аккуратный класс для работы с BMP-изображениями. В классе для работы с TrueColor-изображениями хранить массив SPal **v, а для работы с изображениями, для которых используется не более 8 бит на пиксел, хранить массив unsigned char **w. Должна поддерживаться работы с изображениями 1,2,4,8,24,32 бита на пиксел, серыми изображениями, с и без палитры. Должны присутствовать функции вводы/вывода изображений, масштабирования изображений и конвертации между различными типами.

9.      Написать программу конвертации BMP-файлов. Программа через параметры командной строки получает имена входного и выходного файлов и параметры выходного файла (тип, если требуется, размер).

10.   Написать программу закраски царапин на фото. Царапины = связные чисто белые области (если они не чисто белые, то их можно предварительно прорисовать белым цветом в любом графическом редакторе). Программа должна выделять алгоритмом волны такие области и сглаживать в них цвета по соседним точкам каким-то простейшим алгоритмом (например, обычной линейной интерполяцией по левой и правой точкам каждой строки изображения царапины).

11.   Написать программу закрывания солнца на фото облаком. Солнце ищется как яркая связная область сверху фото (область ищется алгоритмом волны по пикселам с яркостью, большей заданной). Изображение облака берется из отдельного файла. Изображение облака надо подготовить заранее, закрасив все точки на фото облака, не принадлежащие облаку, красным цветом. Этот цвет будет признаком прозрачности при накладывании облака на основное фото.

12.   Проверить, являются ли два фото с одинаковыми размерами одинаковыми изображениями, но с измененными яркостями изображения. Для это для каждого изображения следует произвести эквализацию и посчитать норму разности изображений. Изменение яркости можно осуществлять в Photoshop.

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

14.   Написать программу `старения’ фотографии. Можно сделать цветное фото серым, потом добавить желтизны. Далее найти какое-то фото с царапинами/изломами, как-то выделить их и перенести на наше фото (с изменением масштаба).

15.   Добавить на фото изображение солнца.  На вход подается исходное фото, место, где должно быть на нем солнце, подготовленное изображение солнца. Переноситься должно только солнце без фона на фото с солнцем. Фон на изображении солнца можно предварительно закрасить черным цветом, чтобы использовать это для переноса.