Skip to content

Yarmoshch/image_processor

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 

Repository files navigation

image_processor

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

Поддерживаемый формат изображений

Входные и выходные графические файлы должны быть в формате BMP.

Формат BMP поддерживает достаточно много вариаций, но в этом задании будет использоваться 24-битный BMP без сжатия и без таблицы цветов. Тип используемого DIB header - BITMAPINFOHEADER.

Формат аргументов командной строки

Описание формата аргументов командной строки:

{имя программы} {путь к входному файлу} {путь к выходному файлу} [-{имя фильтра 1} [параметр фильтра 1] [параметр фильтра 2] ...] [-{имя фильтра 2} [параметр фильтра 1] [параметр фильтра 2] ...] ...

При запуске без аргументов программа выводит справку.

Пример

./image_processor input.bmp /tmp/output.bmp -crop 800 600 -gs -blur 0.5

В этом примере

  1. Загружается изображение из файла input.bmp
  2. Обрезается до изображения с началом в верхнем левом углу и размером 800х600 пикселей
  3. Переводится в оттенки серого
  4. Применяется размытие с сигмой 0.5
  5. Полученное изображение сохраняется в файл /tmp/output.bmp

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

Фильтры

В формулах далее считаем, что каждая компонента цвета представлена вещественным числом от 0 до 1. Цвета пикселей представлены тройками (R, G, B). Таким образом, (0, 0, 0) – черный, (1, 1, 1) – белый.

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

Например, для фильтра, заданного матрицей

Значение каждого из цветов целевого пикселя C[x][y] будет определяться формулой

C[x][y] =
  min(1, max(0,
   1*C[x-1][y-1] + 2*C[x][y-1] + 3*C[x+1][y-1] +
   4*C[x-1][y]   + 5*C[x][y]   + 6*C[x+1][y]   +
   7*C[x-1][y+1] + 8*C[x][y+1] + 9*C[x+1][y+1]
))

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

Есть справка Help, которая учит пользоваться этим фильтрами фоторедактора.

To apply filters, use these commands:

  • -blur is a filter that blurs an image, requiring 1 argument.
  • -crop cuts your image to the specified size, requiring 2 arguments: width and height.
  • -edge grayscales an image and applies a specific matrix to each pixel. It needs 1 argument from 0 to 1.
  • -gs converts your image to grayscale with no arguments required.
  • -neg converts your image to negative with no arguments required.
  • -offc is a custom filter that disables one of the color channels, requiring 1 argument: '1' turns off red channel, '2' - green channel, '3' - blue channel
  • -sharp enhances the sharpness of your image with no arguments required.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published