Converter imagem em tons de cinza em Python
-
Converter uma imagem em tons de cinza em Python usando o método
image.convert()
da bibliotecapillow
-
Converter uma imagem em tons de cinza em Python usando o método
color.rgb2gray()
do móduloscikit-image
-
Converter uma imagem em tons de cinza em Python usando o método
cv2.imread()
da bibliotecaOpenCV
-
Converter uma imagem em tons de cinza em Python usando a fórmula de conversão e a biblioteca
Matplotlib
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:
Imagem convertida em tons de 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()