Detección de imágenes de bajo contraste con OpenCV, scikit-image y Python

En este artículo vamos a ver cómo detectar imágenes de bajo contraste con OpenCV, scikit-image usando Python

Una imagen de bajo contraste tiene una distinción mínima entre las partes claras y oscuras, lo que dificulta saber dónde comienza el límite de un objeto y dónde comienza el fondo de la escena. Por ejemplo

El de la izquierda es de bajo contraste y el de la derecha es una imagen de alto contraste. Con la detección de imágenes de bajo contraste, puede detectar mediante programación imágenes que no son suficientes para su proceso de procesamiento de imágenes.

Primero, veamos cómo podemos ver manualmente el contraste de una imagen usando histogramas. El histograma de una imagen de alto contraste (derecha) abarca todo el rango dinámico, pero el histograma de una imagen de bajo contraste (izquierda) solo cubre un rango estrecho, como se ve a continuación. 

Ahora hagámoslo mediante programación usando el método is_low_contrast de la biblioteca scikit-image.

Acercarse:

  • Importe todas las bibliotecas necesarias.
  • Lea la imagen en modo de escala de grises.
  • Compruebe si la imagen es una imagen de bajo contraste o una imagen de alto contraste utilizando algún valor de umbral proporcionado.

Sintaxis: is_low_contrast(img, “valor de umbral”)

Ejemplo 1: imagen de bajo contraste

Imagen de entrada: 

Código:

Python3

import cv2
from skimage.exposure import is_low_contrast
  
img = cv2.imread("low_contrast_img(1).jpg")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
  
if(is_low_contrast(gray,0.35)):
    cv2.putText(img, "low contrast image", (5, 25),
                cv2.FONT_HERSHEY_SIMPLEX, 0.8,
    (0,0,0), 2)
else:
    cv2.putText(img, "high contrast image", (5, 25),
                cv2.FONT_HERSHEY_SIMPLEX, 0.8,
    (0,0,0), 2)
      
cv2.imshow("output",img)
cv2.imwrite("output.jpg",img)
cv2.waitKey(0) 
    
# closing all open windows 
cv2.destroyAllWindows() 

Producción:

Ejemplo 2: imagen de alto contraste

Aporte:

Código:

Python3

import cv2
from skimage.exposure import is_low_contrast
  
img = cv2.imread("high contrast image(2).jpg")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
if(is_low_contrast(gray,0.35)):
    cv2.putText(img, "low contrast image", (5, 25), 
                cv2.FONT_HERSHEY_SIMPLEX, 0.8,
    (0,0,0), 2)
else:
    cv2.putText(img, "high contrast image", (5, 25), 
                cv2.FONT_HERSHEY_SIMPLEX, 0.8,
    (0,0,0), 2)
      
cv2.imshow("output",img)
cv2.imwrite("output.jpg",img)
cv2.waitKey(0) 
    
# closing all open windows 
cv2.destroyAllWindows() 

Producción:

Además, puede encontrar los contornos en imágenes de alto contraste para el preprocesamiento de imágenes y extraer el objeto de la imagen.

Publicación traducida automáticamente

Artículo escrito por bhavyajain4641 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *