Umbral de OpenCV
Este tutorial abordará el uso de la función cv2.threshold()
en Python.
Técnica de umbralización
La umbralización es una técnica de procesamiento de imágenes realizada con imágenes en blanco y negro y es útil para eliminar el ruido y filtrar píxeles con valores extremos. Aquí, usamos una imagen existente para crear una imagen binaria ajustando el valor de los píxeles en función de algún valor de umbral.
Cada valor de píxel se compara con el umbral dado. Si el valor es inferior a un umbral, se pone a 0
; en caso contrario, se pone al máximo (255
).
Podemos usar la biblioteca OpenCV en Python para leer y procesar imágenes para técnicas de visión por computadora. Podemos usar la función cv2.threshold()
para realizar umbrales con esta biblioteca.
Use la función cv.threshold()
para umbralización en OpenCV
La función cv2.threshold()
implementa la técnica básica de umbralización binaria para imágenes en Python. Reemplaza el valor de píxel a 0 o al máximo en función de su comparación con el valor de umbral dado y devuelve el valor de umbral con la imagen procesada como una tupla.
Proporcionamos la imagen para su procesamiento utilizando el parámetro src
. El valor umbral para la comparación se proporciona mediante el parámetro umbral
.
El valor máximo se puede proporcionar mediante el parámetro maxval
. Esto se usa dependiendo del tipo de técnica de umbralización que se analiza a continuación.
El principal parámetro asociado a esta función es el parámetro tipo
. Esto determina el tipo de umbral binario que se utilizará.
El parámetro tipo
puede aceptar cinco valores. El primer tipo es cv2.THRESH_BINARY
, que sigue los principios básicos de la umbralización binaria asignando el valor de píxel 0
cuando es inferior al umbral y 255
cuando es superior.
Ejemplo:
import cv2
i = cv2.imread("deftstack.png")
img = cv2.cvtColor(i, cv2.COLOR_BGR2GRAY)
r, t = cv2.threshold(img, 60, 255, cv2.THRESH_BINARY)
cv2.imshow("THRESH_BINARY", t)
cv2.waitKey(0)
cv2.destroyAllWindows()
Producción:
Usamos la función cv2.imread()
para leer la imagen en el ejemplo anterior. Luego, conviértalo a una imagen en escala de grises usando la función cv2.cvtColor()
, y este proceso seguirá siendo el mismo para los otros tipos también.
Luego, aplicamos la función cv2.threshold()
y proporcionamos los parámetros requeridos. El valor de umbral es 60
, y aplicamos la técnica cv2.THRESH_BINARY
. El resultado final se muestra en una ventana utilizando la función cv2.imshow()
.
Las funciones cv2.waitKey()
y cv2.destroyAllWindows()
evitan que la ventana se cierre inmediatamente y las cierra cuando el usuario presiona cualquier tecla. Hablemos de los otros tipos.
Tenemos el tipo cv2.THRESH_BINARY_INV
, el contrario del tipo anterior. Asigna valor máximo a un píxel cuando es inferior al umbral y asigna 0
.
Ejemplo:
import cv2
i = cv2.imread("deftstack.png")
img = cv2.cvtColor(i, cv2.COLOR_BGR2GRAY)
r, t = cv2.threshold(img, 60, 255, cv2.THRESH_BINARY_INV)
cv2.imshow("THRESH_BINARY_INV", t)
cv2.waitKey(0)
cv2.destroyAllWindows()
Producción:
Procesamos la técnica de umbralización utilizando el tipo cv2.THRESH_BINARY_INV
en la función cv2.threshold()
. El procedimiento es similar al anterior.
El tercer tipo es cv2.THRESH_TRUNC
si el valor del píxel se asigna como umbral cuando supera el valor del umbral.
Todos los píxeles más pequeños que el umbral siguen siendo los mismos.
Ejemplo:
import cv2
i = cv2.imread("deftstack.png")
img = cv2.cvtColor(i, cv2.COLOR_BGR2GRAY)
r, t = cv2.threshold(img, 60, 255, cv2.THRESH_TRUNC)
cv2.imshow("THRESH_TRUNC", t)
cv2.waitKey(0)
cv2.destroyAllWindows()
Producción:
Implementamos la técnica de umbralización cv2.THRESH_TRUNC
utilizando la función cv2.threshold()
en Python.
También existe el tipo cv2.THRESH_TOZERO
. Todos los valores de píxel inferiores al umbral se cambian a cero, mientras que el resto no cambia.
Ejemplo:
import cv2
i = cv2.imread("deftstack.png")
img = cv2.cvtColor(i, cv2.COLOR_BGR2GRAY)
r, t = cv2.threshold(img, 60, 255, cv2.THRESH_TOZERO)
cv2.imshow("THRESH_TOZERO", t)
cv2.waitKey(0)
cv2.destroyAllWindows()
Producción:
El tipo inverso al anterior es el tipo cv2.THRESH_TOZERO_INV
, donde los valores de píxel superiores al umbral se cambia a cero. Podemos usarlo de manera similar.
Ejemplo:
import cv2
i = cv2.imread("deftstack.png")
img = cv2.cvtColor(i, cv2.COLOR_BGR2GRAY)
r, t = cv2.threshold(img, 120, 255, cv2.THRESH_TOZERO_INV)
cv2.imshow("THRESH_TOZERO_INV", t)
cv2.waitKey(0)
cv2.destroyAllWindows()
Producción:
Conclusión
Discutimos la implementación de un umbral simple en este artículo usando la función cv2.threshold()
. El umbral es la técnica de alterar el valor del píxel en comparación con algún valor de umbral.
Discutimos cómo usar la función cv2.threshold()
y sus parámetros. Hay cinco tipos de umbrales posibles con esto usando diferentes valores para el parámetro tipo
.
También existe umbralización adaptativa, que se puede lograr utilizando la biblioteca OpenCV.
Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.
LinkedIn