En este artículo, se analiza el análisis de imágenes utilizando Matplotlib y OpenCV. Primero comprendamos cómo experimentar datos de imágenes con varios estilos y cómo representarlos con histograma.
requisitos previos:
Importación de datos de imagen
import matplotlib.pyplot as plt #importing matplotlib
La imagen debe usarse en un archivo PNG, ya que matplotlib solo admite imágenes PNG. Aquí, es una imagen PNG RGB de 24 bits (8 bits para cada R, G, B) utilizada en este ejemplo. Cada lista interna representa un píxel. Aquí, con una imagen RGB, hay 3 valores. Para imágenes RGB, matplotlib admite tipos de datos float32 y uint8.
img = plt.imread('flower.png') #reads image data
En Matplotlib, esto se realiza mediante la función imshow() . Aquí hemos agarrado el objeto de la trama.
Todo sobre Histograma
El histograma se considera un gráfico o trama que está relacionado con la frecuencia de los píxeles en una imagen en escala de grises
con valores de píxeles (que van de 0 a 255). La imagen en escala de grises es una imagen en la que el valor de cada píxel es una sola muestra, es decir, solo contiene información de intensidad donde el valor del píxel varía de 0 a 255. Las imágenes de este tipo, también conocidas como blanco y negro, están compuestas exclusivamente de tonos de gris, que varían desde el negro en la intensidad más débil hasta el blanco en la más fuerte, donde el píxel puede considerarse como cada punto de una imagen.
Cómo se ve la imagen en escala de grises: Cuantifica el número de píxeles para cada valor de intensidad considerado. Antes de pasar por Histograma, tengamos una idea aproximada de este ejemplo dado.
Aquí, obtenemos intuición sobre el contraste, el brillo, la distribución de intensidad, etc. de esa imagen. Como podemos ver, la imagen y su histograma se dibujan para una imagen en escala de grises, no para una imagen en color.
La región izquierda del histograma muestra la cantidad de píxeles más oscuros en la imagen y la región derecha muestra la cantidad de píxeles más brillantes.
Creación de histograma usando array numpy
Para crear un histograma de nuestros datos de imagen, usamos la función hist().
plt.hist(n_img.ravel(), bins=256, range=(0.0, 1.0), fc='k', ec='k') #calculating histogram
En nuestro histograma, parece que hay una distribución de intensidad en todos los píxeles de la imagen en blanco y negro como una imagen en escala de grises.
Del histograma, podemos concluir que la región oscura es más que una región brillante.
Ahora, trataremos con una imagen que consiste en una distribución de intensidad de píxeles donde el valor de píxel varía. Primero, necesitamos calcular el histograma usando la función incorporada de OpenCV.
Cálculo de histograma
Aquí, usamos cv2.calcHist() (función incorporada en OpenCV) para encontrar el histograma.
cv2.calcHist(images, channels, mask, histSize, ranges[, hist[, accumulate]])
images : es la imagen fuente de tipo uint8 o float32 representada como “[img]”.
canales: es el índice de canal para el que calculamos el histograma. Para la imagen en escala de grises, su valor es [0] y
la imagen en color, puede pasar [0], [1] o [2] para calcular el histograma del canal azul, verde o rojo, respectivamente.
máscara : imagen de máscara. Para encontrar el histograma de la imagen completa, se da como «Ninguno».
histSize: esto representa nuestro conteo de BIN. Para escala completa, pasamos [256].
Gamas : esta es nuestra GAMA. Normalmente, es [0,256].
Por ejemplo:
# load an image in grayscale mode img = cv2.imread('ex.jpg',0) # calculate frequency of pixels in range 0-255 histg = cv2.calcHist([img],[0],None,[256],[0,256])
Luego, necesitamos trazar un histograma para mostrar las características de una imagen.
Trazado de histogramas
Análisis usando Matplotlib:
# importing required libraries of opencv import cv2 # importing library for plotting from matplotlib import pyplot as plt # reads an input image img = cv2.imread('ex.jpg',0) # find frequency of pixels in range 0-255 histr = cv2.calcHist([img],[0],None,[256],[0,256]) # show the plotting graph of an image plt.plot(histr) plt.show()
Entrada: Salida: La ilustración muestra que cada número de píxeles de una imagen se encuentra en un rango de 0 a 255. En el segundo ejemplo, encuentra directamente el histograma y lo traza. No necesitamos usar calcHist(). Vea el código a continuación:
import cv2 from matplotlib import pyplot as plt img = cv2.imread('ex.jpg',0) # alternative way to find histogram of an image plt.hist(img.ravel(),256,[0,256]) plt.show()
Por lo tanto, concluimos que la imagen se puede representar como un histograma para concebir la idea de distribución de intensidad sobre una imagen y promover su tranquilidad.
Referencias:
- http://docs.opencv.org/2.4/doc/tutorials/imgproc/table_of_content_imgproc/table_of_content_imgproc.html#table-of-content-imgproc
- http://www.cambridgeincolour.com/tutorials/histograms1.htm
Este artículo es una contribución de Afzal Ansari . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo usando contribuya.geeksforgeeks.org o envíe su artículo por correo a contribuya@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA