Рубрики
Без рубрики

Преобразовать фото в черный и белый в Python

Получите практические, реальные навыки Python на наших ресурсах и пути

Автор оригинала: Mike Driscoll.

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

Делает его черным и белым

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

Теперь нам просто нужно создать простую функцию, которая может повернуть наше полное цветное фото в черный и белый:

from PIL import Image

def black_and_white(input_image_path,
    output_image_path):
   color_image = Image.open(input_image_path)
   bw = color_image.convert('L')
   bw.save(output_image_path)

if __name__ == '__main__':  
    black_and_white('caterpillar.jpg',
        'bw_caterpillar.jpg')

Вышеуказанная функция принимает два аргумента: путь к файлу входного изображения и путь, который мы хотим сохранить выходные данные. Часть, на котором мы действительно заботимся об этом скрипте, это функция. Он содержит вызов для открытия изображения, который вернет Изображение объект. Затем мы используем этот объект конвертировать Способ преобразования изображения в черный и белый, передавая его строку ‘L’ Отказ Это может показаться немного странным, поэтому давайте посмотрим на Документация Отказ

Здесь вы обнаружите, что первый параметр к методу Convert () – это режим. Подушка поддерживает несколько режимов, в том числе: «P», «L» и «1». Режим, который мы заботимся о том, чтобы на данный момент – это «l». Документация государства «При переводе цветного изображения в черный и белый (режим« L »), библиотека использует преобразование LUMA ITU-R 601-2: * 299/1000 + G * 587/1000 + B * 114/1000″ Где RGB отображается на красный, зеленый и синий. Давайте посмотрим, какой вывод создан наш код:

Это выглядит довольно мило, если я скажу так сам. Проект подушки также поддерживает создание черно-белых изображений с дизером, который в основном добавляет шум на изображение. Давайте посмотрим, как это меняет код:

from PIL import Image

def black_and_white_dithering(input_image_path,
    output_image_path,
    dithering=True):
    color_image = Image.open(input_image_path)
    if dithering:
        bw = color_image.convert('1')  
    else:
        bw = color_image.convert('1',

    dither=Image.NONE)
    bw.save(output_image_path)

if __name__ == '__main__':
    black_and_white_dithering(
        'caterpillar.jpg',
        'bw_caterpillar_dithering.jpg')

Единственная разница между этой функцией и предыдущим является то, что мы добавили Дворница Аргумент, и мы также называем метод Convert () с помощью «1» (один) вместо «l». Вы можете сделать дизенцию с режимом «L», но я хотел показать, что происходит, когда вы используете «1». Давайте посмотрим на вывод:

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

Теперь давайте назовем функцию с дизерингом набор на Ложь Отказ Если вы это сделаете, вы увидите следующее изображение:

Это немного абстрактно выглядит, но и рода интересным. Это почти чернил! Как вы можете видеть, когда дело доходит до создания черно-белых изображений, «L», вероятно, в режиме вы захотите сосредоточиться.

Создание тонированного изображения сепии

Теперь, когда мы узнали, как сделать наши изображения черными и белыми, я хотел поговорить о том, как добавить сепию тонировка на ваш образ. SEPIA Тонированные изображения довольно популярны и дают вашему образу, что старомодный пожелтевший вид. Я копался по всей сети и нашел статью о Фредрик Лунде сайт Это говорило о том, как сделать этот трюк.

Давайте посмотрим на код:

from PIL import Image

def make_sepia_palette(color):
    palette = []
    r, g, b = color
    for i in range(255):
        palette.extend((r*i/255, g*i/255, b*i/255))
        
    return palette

def create_sepia(input_image_path,
    output_image_path):
    whitish = (255, 240, 192)
    sepia = make_sepia_palette(whitish)
    
    color_image = Image.open(input_image_path)
    
    # convert our image to gray scale
    bw = color_image.convert('L')
    
    # add the sepia toning
    bw.putpalette(sepia)
    
    # convert to RGB for easier saving
    sepia_image = bw.convert('RGB')
    
    sepia_image.save(output_image_path)

if __name__ == '__main__':
    create_sepia('caterpillar.jpg',
                 'sepia_caterpillar.jpg')

Здесь мы создаем две функции. Один для создания палитры сепии и другой для нанесения его. Чтобы создать палитру, нам нужно создавать совершенно белый цвет, поэтому мы делаем это, итерацией по кортежу, которое не входит в белый, а затем итация по всем 255 вариациям цветового спектра RGB. Это создает кортеж хорошего размера различных значений RGB, которые представляют палитру Sepia.

Далее мы преобразуем наше изображение на черно-белые (или серые масштабы в зависимости от того, как вы смотрите на него). Затем мы применяем нашу палитру Sepia, используя Putpalette () Способ объекта изображения. Наконец, мы преобразуем изображение обратно в «RGB», как по словам Lundh, это позволяет нам сохранять изображение в качестве JPEG. Я не делал никаких копаний, чтобы посмотреть, все еще требуется в подушке или нет. Наконец, мы сохраняем изображение, и это то, что я получил:

Довольно аккуратно, и код тоже работает довольно быстро!

Обертывание

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

Связанное чтение

  • Pil и Sepia
  • Автоматизировать скучные вещи глава
  • Как вращать/зеркало фотографии с Python
  • Как обрезать фото с Python