Перевод RGB изображения в градации серого в Python

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для перевода RGB-изображения в градации серого на Python рекомендуется использовать библиотеку Pillow.

Python
Скопировать код
from PIL import Image

img = Image.open('color_image.jpg').convert('L')
img.save('grayscale_image.jpg')

Откройте изображение, преобразуйте его в режим 'L', который предназначен для перевода цветов в оттенки серого, и сохраните изменения.

Кинга Идем в IT: пошаговый план для смены профессии

Детальное рассмотрение конвертации в оттенки серого

Перевод изображений из RGB в градации серого является важной операцией во многих приложениях обработки изображений. Разберёмся, как это происходит.

Из RGB в оттенки серого: формула преобразования

Преобразование изображения в градации серого основывается на специальной формуле. Она учитывает восприятие цвета человеком, назначая виды весов компонентам RGB:

Python
Скопировать код
Y' = 0.2989 * R + 0.5870 * G + 0.1140 * B

Выбор весов основан на чувствительности человеческого восприятия к различным цветам: зелёный цвет воспринимается ярче красного и синего. Разработчики Pillow применяют данную формулу, однако существуют и другие методики перевода в градации серого.

Альтернативные методы конвертации

  1. Используя NumPy, можно осуществить преобразование с помощью скалярного умножения:

    Python
    Скопировать код
     import numpy as np
     from PIL import Image
     
     img = Image.open('color_image.jpg')
     arr = np.array(img)
     gray_arr = np.dot(arr[..., :3], [0\.2989, 0.5870, 0.1140])
     gray_img = Image.fromarray(gray_arr.astype('uint8'))
     gray_img.save('grayscale_image_numpy.jpg')
  2. OpenCV предлагает оптимизированные методы для обработки изображений в реальном времени:

    Python
    Скопировать код
     import cv2
    
     img = cv2.imread('color_image.jpg')
     gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
     cv2.imwrite('grayscale_image_opencv.jpg', gray_img)
  3. scikit-image – ещё один инструмент для перевода изображений в оттенки серого:

    Python
    Скопировать код
     from skimage import color, io
     
     img = io.imread('color_image.jpg')
     gray_img = color.rgb2gray(img)
     io.imsave('grayscale_image_skimage.jpg', gray_img)

Обработка изображений с альфа-каналом

Если нужно сохранить прозрачность при переводе изображения в градации серого, используйте режим 'LA' (светимость-альфа) в Pillow:

Python
Скопировать код
img = Image.open('transparent_image.png').convert('LA')
img.save('grayscale_image_with_alpha.png')

Визуализация

Представим процесс визуально: множество ярких цветных пикселей RGB-изображения преобразуем в соответствующие оттенки серого:

🟥🟩🟦 RGB: Калейдоскоп оттенков. 🏳️🏳️🏴 Градации серого: Диапазон от светлых к тёмным тона.

Цель — перевести разноцветие в соответствующие уровни серого:

Смешение:🟥🟩🟦 ➡️ 🎚️ ➡️ 🏳️🏳️🏴

Интенсивность каждого цвета преобразуется в оттенки серого:

🌶️🍋🍇 → 🍲 Как в кулинарии: множество ингредиентов превращаются в однородное блюдо.

Полезные материалы