Búsqueda de sitios web

Programa OpenCV Python para leer y guardar una imagen


OpenCV-python es una biblioteca de visión por computadora de código abierto en Python que se utiliza para procesar imágenes y videos para detectar caras y objetos. Es una de las bibliotecas de procesamiento de imágenes en Python y utiliza la biblioteca Numpy de Python para que todas las matrices de imágenes se representen como un tipo ndarray.

Instalar OpenCV usando pip

Pip install opencv-python 

OpenCV necesita la biblioteca numpy, debemos asegurarnos de que la biblioteca numpy también esté instalada. El módulo Python OpenCV proporciona funciones cv2.imread() y cv2.imwrite() para leer/cargar y escribir/guardar archivos de imagen.

En este artículo, veremos cómo leer y guardar archivos de imagen usando el módulo Python OpenCV.

La función cv2.imread()

La función cv2.imread() lee/carga una imagen y la almacena como una matriz numpy.

Sintaxis

Cv2.imread(filename[, flags])

Parámetros

  • Nombre de archivo: Nombre/destino de un archivo que se debe cargar.

  • Flags: Bandera que puede tomar valores de ImreadModes, que especifica el tipo de color de una imagen cargada.

Valor de retorno

  • El método devuelve una matriz Numpy. Si la imagen no se puede leer (debido a que falta un archivo, permisos inadecuados o formato no compatible/no válido), esta función devolverá una matriz vacía en lugar de generar el error.

La función decide el tipo de imagen utilizando el contenido, no la extensión.

Formatos de archivo admitidos

  • Mapas de bits de Windows: *.bmp, *.dib

  • Archivos JPEG: *.jpeg, *.jpg, *.jpe

  • Archivos JPEG 2000: *.jp2

  • Gráficos de red portátiles: *.png

  • WebP: *.webp

  • Formato de imagen portátil: *.pbm, *.pgm, *.ppm *.pxm, *.pnm

  • Rásteres solares: *.sr, *.ras

  • Archivos de imagen OpenEXR: *.exr

  • Resplandor HDR: *.hdr, *.pic

Nota: Datos geoespaciales rasterizados y vectoriales compatibles con GDAL

Algoritmo para leer una imagen.

  • Importe el módulo cv2.

  • Lea la imagen usando el método cv2.imread().

  • Muestre la imagen en una ventana usando el método cv2.imshow(),

  • Y configure un temporizador para la ventana de salida usando el método cv2.waitKey(0).

  • Finalmente, cierre la ventana de salida utilizando el método cv2.destroyAllWindows().

Ejemplo

Tomemos una imagen como entrada.

#importing the opencv module  
import cv2  
  
# read image using imread('path') and 0 denotes read as grayscale image  
img = cv2.imread('input.jpg',0)

# display image
cv2.imshow('image',img)  
  
cv2.waitKey(0) 
cv2.destroyAllWindows()  

Producción

Ejemplo

La función imread() almacena la imagen en color en un ndarray 3D de fila (alto) x columna (ancho) x color (3). Tomemos una imagen en color como entrada y leámosla con la función imread().

#importing the opencv module  
import cv2  
  
# read image 
img = cv2.imread('logo.png')

# display image
cv2.imshow('image',img)  
cv2.waitKey(0) 
cv2.destroyAllWindows()

print('Type:',type(img))
print('Shape:',img.shape)
print('datatype',img.dtype)

Producción

Type: <class 'numpy.ndarray'>
Shape: (225, 225, 3)
datatype uint8

El objeto de imagen img ha almacenado la matriz tridimensional tridimensional de forma (225, 225, 3).

La función cv2.imwrite()

La función cv2.imwrite() guarda la imagen con un nombre específico. La extensión y la ubicación del nombre del archivo también se eligen desde el primer parámetro de la función.

Esta función devuelve un valor booleano; se devolverá True si la imagen se escribe correctamente. de lo contrario devolverá Falso. Si se especifica el formato de imagen no compatible, la imagen se convertirá a 8 bits sin firmar (CV_8U) y se guardará de esa manera.

La siguiente es la sintaxis de esta función:

Cv2.imwrite(filename, img[, params])

Dónde,

  • filename: Nombre/destino donde se debe guardar el archivo.

  • img: Se necesita una serie de valores para guardar una imagen.

  • params: lista de parámetros específicos del formato codificados como pares.

Ejemplo

En este ejemplo, guardaremos una imagen usando una matriz de ceros con forma (100,100,3).

#import the numpay and opencv modules 
import numpy as np
import cv2

# create a 3-d numpy array
blank_image2 = np.zeros((100,100,3), dtype=np.uint8)

# save or create an image
cv2.imwrite("written_image.jpg", blank_image2)

Producción

True

La función devolvió el valor booleano Verdadero, que indica que el archivo se escribió/guardó correctamente con el nombre especificado. También podemos ver la imagen en blanco con el nombre imagen_escrita.jpg en el bloque de salida anterior.

Ejemplo

En este ejemplo, leeremos la imagen lenna.png de la carpeta Imagen y luego la reescribiremos usando el parámetro params con la más alta calidad.

La matriz, [cv2.IMWRITE_JPEG_QUALITY, 100] indica la calidad más alta. Mientras que 0 es la calidad más baja y el valor predeterminado es 95.

#importing the opencv module  
import cv2  
  
# read image using imread('path') and 0 denotes read as grayscale image  
img = cv2.imread('input.jpg',1)

cv2.imshow('Input image',img)  
cv2.waitKey(0) 
cv2.destroyAllWindows()  

print('Type:',type(img))

status = cv2.imwrite('Images/Output_lenna_opencv_red_high.jpg', img, [cv2.IMWRITE_JPEG_QUALITY, 100])
print('Status:', status)

Aporte

Type: <class 'numpy.ndarray'
Status: True
Details of the 

El tipo de objeto img es ndarray. Y la función imwrite() guardó la imagen Output_lenna_opencv_red_high.jpg en la carpeta Imágenes con éxito.

Artículos relacionados: