Menú principal

domingo, 14 de febrero de 2021

Binarización de una imagen - Python

En este ejercicio el usuario establecerá un umbral, comprendido entre 0 y 255, el cual determinará que pixeles se ponen a negro y cuales a blanco. De esta forma, el color de los pixeles que se hallen por encima de este umbral, serán convertidos a blanco.

Lo primero que debemos hacer es leer una imagen, es importante que esté en escala de grises, si no lo estuviera en post anteriores se muestra como realizar esta transformación. Posteriormente se solicitará al usuario el umbral deseado.
img = cv2.imread('lataCoca.png')
umbral = int(input('intro umbral: '))
Se procede a binarizar la imagen con el método threshold(imagen, umbral, máximo valor de pixeles, tipo binarización) en el cual está albergado en la biblioteca cv2. En nuestro ejercicio, el umbral será un valor elegido por el usuario como ya hemos visto antes y la binarización que utilizaremos será cv2.THRESH_BINARY. El motivo por el que ponemos un guión bajo al principio de la igualdad es porque el método threshold() devuelve dos valores, y a nosotros el único que nos interesa es el segundo.
_ , imgBin = cv2.threshold(img, umbral ,255, cv2.THRESH_BINARY)
Finalmente mostraremos por pantalla la imagen.
cv2.imshow('binaria', imgBin)
cv2.waitKey(0)                   
cv2.destroyWindow('binaria') 

Código completo:
import cv2

img = cv2.imread('lataCoca.png')
umbral = int(input('intro umbral: '))     

_ , imgBin = cv2.threshold(img, umbral ,255, cv2.THRESH_BINARY)

cv2.imshow('binaria', imgBin)
cv2.waitKey(0)                   
cv2.destroyWindow('binaria')     
Resultado obtenido:

La imagen con la que trabajaremos es la siguiente:

Si establecemos un umbral de 127 y los pixeles por encima de este a 255 se obtiene:

En cambio, si mantenemos el mismo umbral, 127, pero los pixeles por encima de este los forzamos a que tengan un valor de 158 se obtendrá el resultado que se muestra a continuación. Vemos como el blanco ha pasado a ser un gris.


_ , imgBin = cv2.threshold(img, umbral ,158, cv2.THRESH_BINARY)

No hay comentarios:

Publicar un comentario