Преобразование RGB в черный или белый

Как мне взять RGB-образ в Python и преобразовать его в черный или белый? Не в оттенках серого, я хочу, чтобы каждый пиксель был либо полностью черным (0, 0, 0), либо полностью белым (255, 255, 255).

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

  • Изменение размера изображения с помощью django?
  • Как читать данные изображений из URL-адреса в Python?
  • Преобразование изображений в webP с помощью подушки
  • Django PIL: IOError Не удается определить файл образа
  • Как я могу нарисовать текст с разными штрихами и заполнить цвета на изображениях с помощью python?
  • Как обновить изображение виджета Tkinter Label?
  • Обрезать изображение с помощью PIL в python
  • Каков самый быстрый способ рисовать изображение из дискретных значений пикселей в Python?
  • 4 Solutions collect form web for “Преобразование RGB в черный или белый”

    Масштабирование до черного и белого

    Преобразуйте в оттенки серого, а затем масштабируйте до белого или черного (в зависимости от того, что ближе).

    Оригинал:

    мяу мяу связали кошку

    Результат:

    Черно-белый кот, чистый

    Реализация чистого подушки

    Установите pillow если вы еще этого не сделали:

     $ pip install pillow 

    Подушка (или PIL) может помочь вам эффективно работать с изображениями.

     from PIL import Image col = Image.open("cat-tied-icon.png") gray = col.convert('L') bw = gray.point(lambda x: 0 if x<128 else 255, '1') bw.save("result_bw.png") 

    Кроме того, вы можете использовать подушку с numpy .

    Подушка + Маленький подход к битмашам

    Вам нужно будет установить numpy:

     $ pip install numpy 

    Для работы Numpy нужна копия массива, но результат тот же.

     from PIL import Image import numpy as np col = Image.open("cat-tied-icon.png") gray = col.convert('L') # Let numpy do the heavy lifting for converting pixels to pure black or white bw = np.asarray(gray).copy() # Pixel range is 0...255, 256/2 = 128 bw[bw < 128] = 0 # Black bw[bw >= 128] = 255 # White # Now we put it back in Pillow/PIL land imfile = Image.fromarray(bw) imfile.save("result_bw.png") 

    Черно-белый с использованием подушки, с размыванием

    Используя подушку, вы можете преобразовать ее прямо в черно-белый. Будет похоже, что у него оттенки серого, но ваш мозг обманывает вас! (Черно-белые рядом друг с другом выглядят серыми)

     from PIL import Image image_file = Image.open("cat-tied-icon.png") # open colour image image_file = image_file.convert('1') # convert image to black and white image_file.save('/tmp/result.png') 

    Оригинал:

    мяу-мяу

    Старинная:

    мяу мяу черно-белая кошка

    Черное и белое, используя подушку, без сглаживания

     from PIL import Image image_file = Image.open("cat-tied-icon.png") # open color image image_file = image_file.convert('1', dither=Image.NONE) # convert image to black and white image_file.save('/tmp/result.png') 

    Я бы предложил преобразовать в оттенки серого, а затем просто применить к нему порог (наполовину, или средний или меадианский, если вы так выбираете).

     from PIL import Image col = Image.open('myimage.jpg') gry = col.convert('L') grarray = np.asarray(gry) bw = (grarray > grarray.mean())*255 imshow(bw) 

    Подушка с сглаживанием

    Используя подушку, вы можете преобразовать ее прямо в черно-белый. Будет похоже, что у него оттенки серого, но ваш мозг обманывает вас! (Черно-белые рядом друг с другом выглядят серыми)

     from PIL import Image image_file = Image.open("cat-tied-icon.png") # open colour image image_file = image_file.convert('1') # convert image to black and white image_file.save('/tmp/result.png') 

    Оригинал:

    мяу-мяу

    Старинная:

    мяу мяу черно-белая кошка

    И вы можете использовать colorsys (в стандартной библиотеке) для преобразования rgb в hls и использовать значение яркости для определения черного / белого:

     import colorsys # convert rgb values from 0-255 to % r = 120/255.0 g = 29/255.0 b = 200/255.0 h, l, s = colorsys.rgb_to_hls(r, g, b) if l >= .5: # color is lighter result_rgb = (255, 255, 255) elif l < .5: # color is darker result_rgb = (0,0,0) 
    Python - лучший язык программирования в мире.