Converter imagem em tons de cinza em Python

Muhammad Waiz Khan 30 janeiro 2023
  1. Converter uma imagem em tons de cinza em Python usando o método image.convert() da biblioteca pillow
  2. Converter uma imagem em tons de cinza em Python usando o método color.rgb2gray() do módulo scikit-image
  3. Converter uma imagem em tons de cinza em Python usando o método cv2.imread() da biblioteca OpenCV
  4. Converter uma imagem em tons de cinza em Python usando a fórmula de conversão e a biblioteca Matplotlib
Converter imagem em tons de cinza em Python

Este tutorial explicará vários métodos para converter uma imagem em tons de cinza no Python. Uma imagem em tons de cinza é uma imagem em que um único pixel representa a quantidade de luz ou contém apenas informações sobre a intensidade da luz. É uma imagem unidimensional e possui diferentes tons de cinza apenas.

Como as imagens em tons de cinza são unidimensionais, elas são usadas para diminuir a complexidade de treinamento dos modelos em vários problemas e em algoritmos como a detecção de bordas do Canny.

Este artigo examinará como podemos converter uma imagem em tons de cinza ou ler uma imagem em tons de cinza em Python usando vários métodos de módulos do Python.

Converter uma imagem em tons de cinza em Python usando o método image.convert() da biblioteca pillow

O método image.convert(mode, ..) pega uma imagem como entrada e a converte no tipo de imagem desejado especificado no argumento mode. O modo inclui imagens em preto e branco de pixel de 1 e 8 bits, imagens RGB, imagens HSV, imagens BGR e imagens LAB, etc.

Como queremos converter nossa imagem em tons de cinza, podemos passar 1 como argumento de modo para o modo preto e branco de 1 bit, L para imagem em preto e branco de 8 bits e LA para o modo alfa. O código de exemplo a seguir demonstra como usar o método image.convert() da biblioteca pillow para converter uma imagem em tons de cinza em Python:

from PIL import Image

img = Image.open("test.jpg")
imgGray = img.convert("L")
imgGray.save("test_gray.jpg")

Imagem original:

exemplo de imagem

Imagem convertida em tons de cinza:

imagem exemplo cinza

Converter uma imagem em tons de cinza em Python usando o método color.rgb2gray() do módulo scikit-image

O color.rgb2gray() pega uma imagem no formato RGB como entrada e retorna uma cópia em tons de cinza da imagem de entrada. O exemplo de código a seguir demonstra como usar o método color.rgb2gray() do módulo scikit-image para obter uma imagem em tons de cinza em Python.

from skimage import color
from skimage import io

img = io.imread("test.jpg")
imgGray = color.rgb2gray(img)

Converter uma imagem em tons de cinza em Python usando o método cv2.imread() da biblioteca OpenCV

Outro método para obter uma imagem em escala de cinza é ler a imagem em escala de cinza diretamente, podemos ler uma imagem em escala de cinza usando o método cv2.imread(path, flag) da biblioteca OpenCV.

Suponha que o valor flag do método cv2.imread() seja igual a 1. Nesse caso, ele irá ler a imagem excluindo o canal alfa, se for 0 irá ler a imagem em tons de cinza, e se for igual para o método -1 irá ler a imagem incluindo as informações do canal alfa.

Portanto, podemos ler uma imagem como tons de cinza de um determinado caminho usando o método imread(), passando o valor do argumento flag como 1.

O código de exemplo a seguir demonstra como usar o método cv2.imread() para ler uma imagem em tons de cinza em Python:

import cv2

imgGray = cv2.imread("test.jpg", 0)

Converter uma imagem em tons de cinza em Python usando a fórmula de conversão e a biblioteca Matplotlib

Também podemos converter uma imagem em tons de cinza usando o RGB padrão para a fórmula de conversão em tons de cinza que é imgGray = 0.2989 * R + 0.5870 * G + 0.1140 * B.

Podemos implementar este método usando a biblioteca Matplotlib em Python, primeiro precisamos ler a imagem usando o método mpimg.imread() e, em seguida, obter as arrays de dimensão vermelha, azul e verde da imagem RGB após obter as arrays podemos aplicar a fórmula neles para obter a imagem em tons de cinza. Precisamos multiplicar as arrays completas com os valores dados na fórmula para obter a imagem em tons de cinza.

O exemplo de código a seguir demonstra como podemos implementar a fórmula de conversão RGB para escala de cinza em Python usando a biblioteca Matplotlib.

from matplotlib import pyplot as plt
import matplotlib.image as mpimg

img = mpimg.imread("test.jpg")

R, G, B = img[:, :, 0], img[:, :, 1], img[:, :, 2]
imgGray = 0.2989 * R + 0.5870 * G + 0.1140 * B
plt.imshow(imgGray, cmap="gray")
plt.show()

Artigo relacionado - Python Image