Uso de histogramas con OpenCV en Python 3.6.8

  • 0 Respuestas
  • 961 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Andr0z

  • *
  • Ex-Staff
  • *****
  • Mensajes: 19
  • Actividad:
    0%
  • Country: mx
  • Reputación 2
    • Yahoo Instant Messenger - Andr0z
    • Ver Perfil

Uso de histogramas con OpenCV en Python 3.6.8

  • en: Abril 11, 2020, 10:57:15 pm
OpenCV es una de las bibliotecas más famosas de visión artificial que se ha utilizado en gran cantidad de aplicaciones, por mencionar algunas de ellas:

-Reconocimiento facial
-Robótica móvil
-Reconocimiento de objetos
-Segmentación
-Interacción persona-computadora

Entre otras muchas mas aplicaciones.

En está ocasión el tema se tratará acerca del uso de histogramas para la visualización de la descomposición de color de una imagen de 8 bits a sus canales BGR o RGB.

Primero importaremos las respectivas librerías que se utilizaran para la aplicación

Código: (python) You are not allowed to view links. Register or Login
import cv2 #importamos OpenCV
import numpy as np
from matplotlib import pyplot as plt
 

Una vez importadas las librerías correspondientes procedemos a usar la función imread() para cargar una imagen, el código sería:

Código: (python) You are not allowed to view links. Register or Login
imagen=cv2.imread(r"interior.png")
 

Luego se separa con la función split  la matriz de vectores de nuestro elemento:

Código: (python) You are not allowed to view links. Register or Login
b,g,r=cv2.split(imagen)

Y se visualizan los canales B,G,R y la imagen original con la función imshow:

Código: (python) You are not allowed to view links. Register or Login
cv2.imshow("imagen", imagen)
cv2.imshow("b", b)
cv2.imshow("g", g)
cv2.imshow("r", r)

Nota:Las imágenes se mostrarán en escala de grises debido a que los vectores (B,G,R) se separan en escalares (por pixel), por tanto el sistema los considera como negro (valor cero) o blanco(valor 255), lo que quiere decir que si por ejemplo en la imagen "b" se encuentra con una tonalidad mas blanca en algún conjunto de pixeles, dará a entender que el canal RGB esta compuesto por ese color en mayor parte, es decir el color del pixel original  se vería como (230,G,R)

Finalmente, para graficar los histogramas se llama la función hist de pyplot:

Código: (python) You are not allowed to view links. Register or Login
plt.hist(b.ravel(),256,[0,256])
plt.hist(g.ravel(),256,[0,256])
plt.hist(r.ravel(),256,[0,256])
plt.show()

Los histogramas nos mostrarán el numero de pixeles que hay correspondientes a los valores de  0 a 255 por cada canal. El código completo sería:

Código: (python) You are not allowed to view links. Register or Login
import cv2 #importamos OpenCV
import numpy as np
from matplotlib import pyplot as plt
#lectura de la imagen
imagen=cv2.imread(r"interior.png")

# generacion de los canales blue, green y red (bgr) mediante la descoposicion de la imagen original con la funcion split
b,g,r=cv2.split(imagen)
#print(image)
#print(image[0][0])
# mostrar las imagenes repsectivas a la imagen y los canales
cv2.imshow("imagen", imagen)
cv2.imshow("b", b)
cv2.imshow("g", g)
cv2.imshow("r", r)

# graficar histogramas
plt.hist(b.ravel(),256,[0,256])
plt.hist(g.ravel(),256,[0,256])
plt.hist(r.ravel(),256,[0,256])
plt.show()

# esperar a  presionar alguna tecla para continuar
cv2.waitKey(0)

# destruye todas las ventanas en proceso
cv2.destroyAllWindows()

Si corremos nuestro código se vería como sigue:




« Última modificación: Abril 12, 2020, 05:22:16 pm por Andr0z »