Umbral de OpenCV

Manav Narula 21 junio 2023
  1. Técnica de umbralización
  2. Use la función cv.threshold() para umbralización en OpenCV
  3. Conclusión
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:

THRESH_BINARY usando cv2.threshold

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:

THRESH_BINARY_INV usando cv2.threshold

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:

THRESH_TRUNC usando cv2.threshold

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:

cv2.THRESH_TOZERO usando cv2.threshold

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:

cv2.THRESH_TOZERO_INV utilizando cv2.threshold

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 Narula avatar Manav Narula avatar

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

Artículo relacionado - Python OpenCV