Рассмотрим способы преобразования изображения из RGB в оттенки серого в Python.
Установите библиотеку open-cv, если вы еще не установили ее, используя команду ниже.
|
1 2 3 4 5 |
python3 -m pip install opencv-python # OR pip install opencv-python |
- Способ 1: использование методов cv2.imread() и cv2.cvtColor()
- Шаг 1. Импортируйте необходимые модули
- Шаг 2. Определите функцию оттенков серого
- Шаг 3. Получите входное изображение
- Способ 2: использование метода image.convert()
- Пример
- Способ 3: с помощью библиотеки NumPy
- Пример
- Способ 4: используйте Matplotlib и Sci-Kit
- Пример
Способ 1: использование методов cv2.imread() и cv2.cvtColor()
Чтобы преобразовать изображение RGB в оттенки серого в Python, самый простой способ — использовать методы cv2.imread() и cv2.cvtColor().
Следуйте инструкции ниже:
Шаг 1. Импортируйте необходимые модули
Мы будем использовать объект Image из модуля PIL. Поэтому мы специально импортируем это.
Затем импортируйте модуль argparse. Затем импортируйте модуль cv2 и модуль os.
|
1 2 3 |
import argparse import cv2 import os |
Шаг 2. Определите функцию оттенков серого
Мы прочитаем изображение, используя метод cv2.imread() в этой функции.
|
1 2 3 4 5 6 7 |
# Function to convert RGB Image to GrayScale def convertImageToGray(args): image = cv2.imread(args["image"]) gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) filename = f"{os.getpid()}.png" cv2.imwrite(filename, gray) print('The image is converted to Grayscale successfully') |
Шаг 3. Получите входное изображение
Добавьте следующий код в файл app.py.
|
1 2 3 |
ap = argparse.ArgumentParser() ap.add_argument("-i", "--image", required=True, help="path to input image") args = vars(ap.parse_args()) |
Наши аргументы командной строки анализируются. У нас есть следующие аргументы командной строки:
- —image: путь к изображению, которое мы отправляем в функцию.
Итак, когда мы запускаем команду python3 app.py, мы передаем путь аргумента к изображению, как показано ниже.
|
1 |
python3 app.py --image="data.jpg" |
Здесь изображение data.jpg передается методу ConvertImageToGray().
Наконец, вызовите функцию.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
import argparse import cv2 import os # Function to convert RGB Image to GrayScale def convertImageToGray(args): image = cv2.imread(args["image"]) gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) filename = f"{os.getpid()}.png" cv2.imwrite(filename, gray) print('The image is converted to Grayscale successfully') # Fetch the arguments from the command line ap = argparse.ArgumentParser() ap.add_argument("-i", "--image", required=True, help="path to input image") args = vars(ap.parse_args()) # Call the convertImageToGray() Function filename = convertImageToGray(args) |
Вот и все. Перейдите к терминалу и введите следующую команду, указав путь к изображению.
|
1 |
python3 app.py --image="data.jpg" |
Вы можете проверить папку текущего проекта и найти имя изображения, например 4999.png, или любое четырехзначное изображение Number.png. Мое изображение находится в правой части следующего вывода.

Способ 2: использование метода image.convert()
Метод img.convert() используется для преобразования изображения RGB в представление в оттенках серого.
Пример
|
1 2 3 4 5 6 7 8 9 10 |
import cv2 img_rgb = cv2.imread('kdl.png') img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY) cv2.imshow('Original image', img_rgb) cv2.imshow('Gray image', img_gray) cv2.waitKey(0) cv2.destroyAllWindows() |
Выход

Способ 3: с помощью библиотеки NumPy
Этот метод использует библиотеки NumPy и Matplotlib для чтения изображения RGB, преобразования его в представление в оттенках серого, построения графика и отображения на графике.
Пример
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
import numpy as np import matplotlib.pyplot as plt import matplotlib.image as mpimg def rgb2gray(rgb): return np.dot(rgb[..., :3], [0.299, 0.587, 0.144]) img_rgb = mpimg.imread('kdl.png') img_gray = rgb2gray(img_rgb) plt.imshow(img_gray, cmap=plt.get_cmap('gray')) plt.savefig('erock_gray.jpg') plt.show() |
Выход

Способ 4: используйте Matplotlib и Sci-Kit
Этот метод импортирует библиотеки Matplotlib и Scikit-Learn для преобразования изображения RGB в представление в оттенках серого. Этот код отображает изображения RGB и оттенки серого рядом на графике.
Пример
Чтобы использовать этот метод, вам необходимо установить пакет scikit-image.
|
1 |
pip install scikit-image |

Теперь напишите код, который преобразует изображение из RGB в оттенки серого.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
import matplotlib.pyplot as plt from skimage import io from skimage.color import rgb2gray rgb_img = io.imread('kdl.png') # Keep only the first 3 channels(RGB) and exclude the 4th(alpha) channel rgb_img = rgb_img[:, :, :3] gray_img = rgb2gray(rgb_img) fig, axes = plt.subplots(1, 2, figsize=(8, 4)) ax = axes.ravel() ax[0].imshow(rgb_img) ax[0].set_title("Original image") ax[1].imshow(gray_img, cmap=plt.cm.gray) ax[1].set_title("Grayscale image") fig.tight_layout() plt.show() |
Выход

