¿Cómo convertir una imagen de colores a Blanco y Negro?

In [12]:
import matplotlib.pyplot as plt
import matplotlib.image as image
import numpy as np

img = image.imread("img/banana.png")
img2 = np.zeros(img.shape)

for i in range(img.shape[0]):
    for j in range(img.shape[1]):
        if sum(img[i][j]) > 1.5:
            img2[i][j] = np.array([1,1,1])
        else:
            img2[i][j] = np.array([0,0,0])

fig, axs = plt.subplots(1, 2)
axs[0].imshow(img)
axs[1].imshow(img2)
plt.show()

Vamos paso a paso, primero mostrar la imagen

In [4]:
import matplotlib.pyplot as plt
import matplotlib.image as image
import numpy as np

img = image.imread("img/banana.png")

plt.imshow(img)
plt.show()

Tenemo que tener en cuenta que el array que contiene la imagen es de 3 dimensiones.

  • La primera es para las filas
  • La segunta para las columnas
  • La tercera es para guardar el valor del color

El color se guarda en el formato RGB y el valor va de 0.0 a 1.0

Entonces para considerar que se pintará un pixel en color blanco(1,1,1), comprobamos que la suma sea mayor a 1.5 y en caso contrario sera negro(0,0,0)

In [83]:
import matplotlib.pyplot as plt
import matplotlib.image as image
import numpy as np

img = image.imread("img/banana.png")
img2 = np.zeros(img.shape)

for i in range(img.shape[0]):
    for j in range(img.shape[1]):
        if sum(img[i][j]) > 1.5:
            img2[i][j] = np.array([1,1,1])
        else:
            img2[i][j] = np.array([0,0,0])

fig, axs = plt.subplots(1, 2)
axs[0].imshow(img)
axs[1].imshow(img2)
plt.show()

Podemos variar el punto limite(umbral), y ver como se muestra la imagen. Para facilitar esto podemos crear una funcion que nos retorna la imagen procesada.

In [10]:
import matplotlib.pyplot as plt
import matplotlib.image as image
import numpy as np

def getImg(img, umbral):
    img2 = np.zeros(img.shape)
    for i in range(img.shape[0]):
        for j in range(img.shape[1]):
            if sum(img[i][j]) > umbral:
                img2[i][j] = np.array([1,1,1])
            else:
                img2[i][j] = np.array([0,0,0])
    return img2

img = image.imread("img/banana.png")

fig, axs = plt.subplots(1, 4)
axs[0].imshow(img)
axs[1].imshow(getImg(img,1.0))
axs[2].imshow(getImg(img,1.5))
axs[3].imshow(getImg(img,2.0))
plt.show()

No hay comentarios.:

Publicar un comentario